[Shared Tasks] Implement Activity Locking (#2339)

* Add shared task element locking

This adds the `lock_activity_id` field to the tasks table which will
automatically lock a shared task when that element becomes active.

A method was added to world analogous to zone's UnlockActivities to
determine when an activity is active with respect to task steps.

Also adds quest apis to manually lock or unlock a client's shared task

* Add comment
This commit is contained in:
hg
2022-07-30 20:57:57 -04:00
committed by GitHub
parent ea878ed27f
commit f64d072af7
15 changed files with 149 additions and 30 deletions
+9
View File
@@ -28,6 +28,7 @@
#define ServerOP_SharedTaskPlayerList 0x0313 // zone -> world /taskplayerlist command
#define ServerOP_SharedTaskMemberChange 0x0314 // world -> zone. Send shared task single member added/removed (client also handles message)
#define ServerOP_SharedTaskKickPlayers 0x0315 // zone -> world /kickplayers task
#define ServerOP_SharedTaskLock 0x0316 // zone -> world
enum class SharedTaskRequestGroupType {
Solo = 0,
@@ -105,6 +106,8 @@ struct SharedTaskActivityStateEntry {
uint32 max_done_count; // goalcount
uint32 updated_time;
uint32 completed_time;
int step;
bool optional;
};
struct ServerSharedTaskActivityUpdate_Struct {
@@ -162,6 +165,12 @@ struct ServerSharedTaskKickPlayers_Struct {
uint32 task_id;
};
struct ServerSharedTaskLock_Struct {
uint32 source_character_id;
uint32 task_id;
bool lock;
};
class SharedTask {
public:
// used in both zone and world validation