* Ignore messages containing invalid links again instead of trying to sanitize them. Closes#22451.
* No longer filter messages on the addon channel. Closes#22450.
- PvE combat is now always mutual. UNIT_FLAG_IN_COMBAT is backed by actual references to the units we're in combat with.
- PvP combat is now also tracked, and almost always mutual; spells like Vanish and Feign Death can break this rule. That means we can easily determine a list of players we're fighting.
- By extension, IsInCombatWith now has sensible behavior when invoked on nonplayers.
- Threat and combat systems are no longer the same.
- They still have an enforced relationship (threat implies combat - clearing combat clears threat)...
- ...but we can have combat without threat. A creature (with threat list) isn't considered to be engaged until it has an entry on its threat list...
- ...which means we can now faithfully replicate retail engage behavior. Combat on projectile launch - engagement start on projectile impact. Yay for progress!
- AI method refactor, as already ported in 6113b9d - `JustEngagedWith`, `JustEnteredCombat` and `JustExitedCombat`.
- Vehicle threat is now properly pooled on the main vehicle body (fixes#16542).
- Various edge case bug fixes for threat redirects (Misdirection "cancelling" Vigilance and similar).
- Target re-selection is now significantly faster.
- Fixed a ton of other smaller edge case bugs, probably.
Closes#7951 and #19998.
Fix SocketTimeOutTime and SocketTimeOutTimeActive settings being effectively halved by reducing the timeout time twice every update instead of just once, causing much faster kicks (i.e. after 30 seconds with 60 seconds set in the configs).
- 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.
* world/auth servers will now fail to startup if listen ports are in use
* Restored "Network.OutUBuff" config option lost during boost transition
(cherry picked from commit 6c92a481a3)
- Implemented manager for petitions to perform all petition related tasks and synchronize data with database.
- This kills ugly synchronous querys on packet handlers
* Remade who list processing, requests are now processed in maps. Player entries are now copied every 5 seconds to dedicated storage (avoids usage of hashmapholder mutex)
Changes list:
- Added CharacterGuidByNameContainer which contains name -> guid unordered map (updated along CharacterInfo)
- Extended CharacterInfo structure with GuildId
- Extended CharacterInfo structure with ArenaTeamId[3], for all possible teams (2v2, 3v3, 5v5)
- Removed CHAR_SEL_GUID_BY_NAME and CHAR_SEL_CHAR_GUID_BY_NAME synchronous queries, name -> guid can be now retrieved in World::GetCharacterGuidByName
- Removed CHAR_SEL_GUID_RACE_ACC_BY_NAME synchronous query, guid can be retrieved by name and rest of the data can be retrieved by guid
- Removed CHAR_SEL_CHAR_LEVEL synchronous query, level can be retrieved by guid
- Changed CHAR_SEL_CHARACTER_ACTIONS_SPEC to asynchronous query, action bars are now loaded asynchronously
- Removed CHAR_SEL_CHARACTER_NAME_CLASS synchronous query, guid can be retrieved by name and rest of the data can be retrieved by guid
- Removed CHAR_SEL_PLAYER_ARENA_TEAMS and CHAR_SEL_ARENA_TEAM_ID_BY_PLAYER_GUID synchronous queries, arena teams are now stored in CharacterInfo
- Replaced synchronous db calls with CharacterInfo lookups
- Removed ObjectMgr::GetPlayerGUIDByName, as it used db query
- Replaced some unnecessary UpdateObjectVisibility() calls because they were either duplicated (called few lines above in other function) or it is enough to call DestroyForNearbyPlayers because object is being removed or should be invisible and DestroyForNearbyPlayers is faster
- Corrected typo in Player::DestroyForPlayer, only items in slots 0 to EQUIPMENT_SLOT_END are sent to other players
- Renamed Player::GetGuildIdFromDB to Player::GetGuildIdFromCharacterInfo and changed the function to use CharacterInfo structure
- Renamed Player::GetArenaTeamIdFromDB to Player::GetArenaTeamIdFromCharacterInfo and changed the function to use CharacterInfo structure
- Renamed Player::GetLevelFromDB to Player::GetLevelFromCharacterInfo and changed the function to use CharacterInfo structure
- Removed GameEventMgr::_questToEventLinks and associated functions, eventId is now stored in Quest class under _eventIdForQuest variable
- Changed some functions checking quest status to use other functions for quest status check instead of duplicating code
- Removed callback from add friend, because we can get the guid from appropriate storage, no need to make db query
- Removed callback from add ignore, because we can get the guid from appropriate storage, no need to make db query
- Added callback to unwrap wrapped items asynchronously
- Removed synchronous select in tutorials to check if we have any entries in db, if any entry exists in db, m_TutorialsChanged variable will have TUTORIALS_FLAG_LOADED_FROM_DB flag added and it is no longer necessary to query database
* Core/Packets: Port packet handling rework from 6.x branch
Port packet handling reword from 6.x branch. Old handlers are still used at the moment, these changes allow to port old handlers to new packet-specifc ones.
Docs at https://trinitycore.atlassian.net/wiki/display/tc/Monitoring+a+TrinityCore+server
* Common/Graphs: Initial proof of concept
* Move influx db code to its own class
* Reuse the same socket
* Allow to log values of different categories
* Allow to log events
* Pass the timestamp to influxdb
* Send events in batches
* Send data async
* Log server shutdown.
Fix memory leak.
* Allow to enable/disable Stats in the settings and at runtime
* Read interval between each batch send from config
* Add InfluxDB connection info to configs
* Move each event category to its own table
* Log pathfinding queries
* Move categories table initialization to constructor using enum as key to avoid assigning the table name to the wrong enum value
* Log player login/logout events.
Pass the hostname correctly in the HTTP request.
* Fix linux build
* Handle "Connection: close" HTTP header, reconnecting on next scheduled send.
Disable StatsLogger if connection fails, logging the error.
* Add an enum for categories of logged values, it's still possible to pass a string instead of the enum.
* Don't log the whole batchedData when InfluxDB returns an error, it's too long and unreadable on console.
* Allow to call a function at a specified interval in thread-safe World::Update() context to log data like player count.
* Log map tile load/unload
* Core/StatsLogger: Allow logging more value types other than ints
https://docs.influxdata.com/influxdb/v0.10/write_protocols/write_syntax/
* Fix a typo in string escape of StatsLogger
* Yet more fixes to the escaping in FormatInfluxDBValue
* DB/Gameobject: Fix respawn time of few Quest GameObjects
By Tauriella, closes#16701
* DB/Misc: Fix some engrish
By tkrokli closes#16648
* Tools/MMaps: Add format library linking to mmaps_generator
(Very) partial cherry pick of ed75b0649a
* Core/StatsLogger: Simplify code
Convert values and categories arrays to maps initialized in-place
Remove constructor and destructor
* Core/StatsLogger: Add realm name to the event and value tags
* Log amount of processed packet of each session
* Apply recent singleton changes to sStatsLogger too
* Fix influxdb data format if no realm name is present
* Remove unneeded newlines from request body, fixes response 400 from InfluxDB 0.10
* Rename Reporting folder to Metric
* Rename StatsLogger to Metric
* Rename InfluxDB configs to Metric
* Add Grafana dashboards
* Add a random annoying macro
* Move string formatting to Metric::SendBatch(), reducing performance footprint of Metric::LogEvent() and Metric::LogValue()
* Update grafana graphs refresing tags on load and showing now-15m data, refreshing every minute. These settings can be modified in grafana.
* Rename MetricData fields
* Contrib/Grafana: Rename dashboard files
* Contrib/Grafana: Replace hardcoded Windows/Ubuntu realm names by the default, Trinity
* Config/Worldserver: Add missing section to the index
* Contrib/Grafana: Add singlestat panels with current online players, update diff averages (1 min, 5 mins and 15 mins)
http://i.imgur.com/Zi8lfvS.png
* Core/Metric: Replace the enums MetricEventCategory and MetricValueCategory by strings
For the sake of simplicity and less recompile time when adding new metrics, similar to how TC_LOG_* works
* Contrib/Grafana: Display the current number of online players and not its average
Closes#15075