Repository navigation
Expand file tree
/
Copy pathtask_types.py
More file actions
118 lines (101 loc) · 3.12 KB
/
Copy pathtask_types.py
File metadata and controls
118 lines (101 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from dataclasses import dataclass
from datetime import datetime
from enum import StrEnum
@dataclass
class VerificationData:
method: str
# TODO: achievement diary and skill verification methods
@dataclass
class CollectionLogVerificationData(VerificationData):
item_ids: list[int]
count: int
@dataclass
class AchievementDiaryVerificationData(VerificationData):
region: str
difficulty: str
@dataclass
class SkillVerificationData(VerificationData):
experience: dict
count: int
@dataclass
class TaskData:
id: str
name: str
short_name: str
tip: str
wiki_link: str
image_link: str
display_item_id: int
tags: list["TaskTag"]
verification: VerificationData
class TaskTag(StrEnum):
LMS = "lms"
@dataclass
class UserCurrentTask:
id: str
assigned_date: datetime = None
@dataclass
class CompletionMethod(StrEnum):
MANUAL = 'manual'
SYNC = 'sync'
@dataclass
class UserCompletedTask:
id: str
assigned_date: datetime = None
completed_date: datetime = None
completed_item_ids: list[int] = None
was_active: bool | None = None
method: CompletionMethod | None = None
play_time: int | None = None
@dataclass
class UserTaskList:
current_task: UserCurrentTask
completed_tasks: list[UserCompletedTask]
recorded_item_ids_by_task: dict[str, list[int]] = None
@dataclass
class TierProgress:
percent_complete: int
total: int
total_complete: int
@dataclass
class UserTierProgressCache:
easy: TierProgress
medium: TierProgress
hard: TierProgress
elite: TierProgress
master: TierProgress
passive: TierProgress
extra: TierProgress
pets: TierProgress
class PageTask:
def __init__(self, is_completed: bool, is_current: bool, task_data: TaskData,
completed_date = None, completed_date_iso: str = None,
verification_item_ids: list[int] = None,
verification_required_count: int = None,
related_item_ids: list[int] = None,
completed_item_ids: list[int] = None):
self.name = task_data.name
self.is_completed = is_completed
self.id = task_data.id
self.is_current = is_current
self.wiki_link = task_data.wiki_link
self.image_link = task_data.image_link
self.tip = task_data.tip
self.completed_date = completed_date
self.completed_date_iso = completed_date_iso
self.verification_item_ids = verification_item_ids or []
self.verification_required_count = verification_required_count
self.related_item_ids = related_item_ids or []
self.completed_item_ids = completed_item_ids or []
@dataclass
class LeaderboardEntry:
username: str
easy_progress: TierProgress
medium_progress: TierProgress
hard_progress: TierProgress
elite_progress: TierProgress
master_progress : TierProgress
# TODO Have different weightings per tier
def points(self) -> int:
return self.easy_progress.percent_complete + self.medium_progress.percent_complete + \
self.hard_progress.percent_complete + self.elite_progress.percent_complete