This reverts commit 8d27602aa0b3f766760f0952389c988f1b150de6.
This doesn't work because a linkdead leader coming back online will
toggle to offline state anyway
Add client GetDynamicZones method to provide a single method to get all
associated client dynamic zones
Refactor compass update and MovePCDynamicZone to use this method
instead of searching for client dzs separately
Add optional disable message arg to MovePCDynamicZone
Also supports reducing lockout duration
Add Expedition::AddLockoutDuration
Add Client::AddExpeditionLockoutDuration
Some expeditions require adding to existing lockout durations
during progression. These add the specified seconds to individual
member lockout timers instead of setting a static duration based on
internal expedition lockout like UpdateLockoutDuration.
This was loading the dz from database to get safe return data every time
a client's dz removal timer triggered
Add the Zone::GetDynamicZone() method so zones that are dz instances can
find the data from the cache of any dz systems
This prevents toggling to offline state before setting to and from
linkdead status. Without this change, a new expedition leader will be
chosen as soon as the current leader goes linkdead. On live an
expedition leader retains leadership while linkdead
Remove logging unsanitized input
Make unsigned comparison not compare < 0
Cleanup some FormatName and string usage. Some of these strings could
probably be moved instead
Remove unnecessary expedition lookup in a world message handler
Add static expedition methods to add or remove character lockouts
Add CreateLockout static helper to ExpeditionLockoutTimer
Refactor existing character lockout removal to allow removal of lockouts
for offline characters (was only used by #dz lockouts remove command)
Fix #dz list member count
Remove extra cross zone message server opcode and struct. Existing
function already exists for normal messages
Group CZClientMessageString struct with other CZ structs
Breaking change to the current API
has_replay_timer column removed from expedition_details table
This argument is unnecessary and just creates confusion. Expedition
replay timers use a hardcoded name precisely for this purpose and
those lockouts are already being checked on creation requests.
This fixes an edge case with client invites sometimes failing because
an expired lockout hasn't been removed from client yet
Clients no longer receive expired lockouts from expeditions when joining
Make quest compass a vec3 to remove include dependency
Quest compass location doesn't require a zone id since it can only be
set in the zone that it's drawn in. Drop the DynamicZoneLocation member
and forward declare to remove the dependency on header.
Move ExpeditionInvite struct to zone common header
Including expedition.h in client.h just to use the ExpeditionInvite struct
is an unnecessary header dependency that increases incremental build time.
This allows expedition classes to be forward declared in client header.
This allows expedition creation to be passed via Lua tables
This also allows for compass, safereturn, and/or zone in location data
of dynamic zones to be set on expedition creation from lua api
Usage example:
local instance_info = {
"anguish", 0, 21600,
compass = { 300, 1353.15, 1712.19, 109.001 },
safereturn = { 300, 1349.13, 1715.00, 123.81, 0 },
zonein = { -9, -2466, -79, 0 }
}
local expedition_info = { "Anguish, the Fallen Palace", 6, 54, true }
local dz = e.other:CreateExpedition(instance_info, expedition_info)
Add optional argument to CreateExpedition to disable conflict messages
Some live expeditions like anguish use a timeout to prevent excessive
leader conflict messages while still performing a creation request
Add DynamicZone sql table schema
Add DynamicZones logging category
Modify CreateExpedition to take DynamicZone and ExpeditionRequest objects
Implement DynamicZone compass, safereturn, and zone-in coordinates.
Implement live-like DynamicZone instance kick timer for removed members
Implement updating multiple client compasses (supports existing quest compass)
fix: Send client compass update after entering zones to clear existing compass
Implement Client::MovePCDynamicZone to invoke DynamicZoneSwitchListWnd
when entering a zone where client has multiple dynamic zones assigned
Implement OP_DzChooseZoneReply handling
Add Lua api methods for expedition's associated dynamic zone
Add #dz list gm command to list current DynamicZone instances from database
Add Expeditions logging category
Add handlers for all Dynamic Zone/Expedition related opcodes
Add FormatName string_util function to format character names
Add Zone::IsZone helper method
Add cross zone MessageString support with variable parameters
Add static Client method helpers for cross zone messaging
Add #dz gm command to debug expedition cache for current zone
- Add $client->SetRadiantCrystals(value) to Perl.
- Add $client->SetEbonCrystals(value) to Perl.
- Add client:SetRadiantCrystals(value) to Lua.
- Add client:SetEbonCrystals(value) to Lua.
Co-authored-by: Chris Miles <akkadius1@gmail.com>
Added a new questAPI GetSpellIDByBookSlot to allow for sorting spellbooks by various attributes (level, type, etc). Allows to determine which spell is in what book slot.
* Cache EntityList::GetRaidByClient
* Adjustments [skip ci]
* Update entity [skip ci]
* More cleanup [skip ci]
* More tweaks [skip ci]
* Cleanup [skip ci]
* Fix bugs with UCS reconnection on crash / exit, not adding soft deleted characters, put main loop on UV lib
* Reduce log spam that should be debugging; send keepalives to clients so that they properly prune from the connection list
* Shutdown the eventloop to properly shutdown the zone versus calling a hard exit
This is a field in the packet, live only uses this for Lay on Hands
Currently I didn't add this to the packet since it has 0 effect on the
client.
We could move this field to aa_ranks which would give more flexibility
for custom servers, but no one said they wanted it there.