File size: 5,704 Bytes
8309961
 
d79f5f2
 
 
 
 
 
 
 
de7f21d
 
 
bb68beb
d79f5f2
 
 
 
 
 
 
00cd8e1
5fafe16
 
 
 
 
 
 
d79f5f2
 
 
5784cf3
 
77f112d
 
5784cf3
 
77f112d
5784cf3
 
 
77f112d
 
 
 
82eb64f
00cd8e1
82eb64f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8309961
 
00cd8e1
8309961
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
00cd8e1
8309961
 
 
 
00cd8e1
 
 
 
 
8309961
 
00cd8e1
 
 
 
 
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import json
from datetime import datetime
from typing import List

import gradio as gr

MEDIA_PATH = "medias/"
MEDIA_FILE_TYPE = ".png"


def get_content(file_name: str) -> str:
    with open(file_name, "r", encoding="utf-8") as file:
        content = file.read()
    return "<div style='max-width:100%; max-height:360px; overflow:auto'>" + content


def get_player_partners(player_info: gr.State) -> List[str]:
    return [
        f"{MEDIA_PATH}{partner}{MEDIA_FILE_TYPE}" for partner in player_info["partners"]
    ]


def get_player_nickname(player_info: gr.State) -> str:
    player_nickname = player_info["player_nickname"]
    if player_nickname:
        return f'# 光束守護者 - {player_info["player_nickname"]}'
    else:
        return "# 光束守護者"


def get_player_badges(player_info: gr.State) -> List[str]:
    return [f"{MEDIA_PATH}{badge}{MEDIA_FILE_TYPE}" for badge in player_info["badges"]]


def get_player_adventure_logs(player_info: gr.State) -> List[str]:
    log_template = """<div class="adventure"><p>{player_log}</p></div>"""
    return [
        log_template.format(player_log=player_log)
        for player_log in player_info["adventure_logs"]
    ]


def get_player_adventure_logs_html(player_info: gr.State) -> str:
    adventure_logs = "".join(get_player_adventure_logs(player_info))
    template_content = get_content("htmls/adventure_template.html")
    return template_content.replace("{logs}", adventure_logs)


def get_player_achievements(player_info: gr.State) -> List[str]:
    achivement_name_map = {
        "participation_star": "參賽之星",
        "star_score_settler": "星際積分領航者",
        "interstellar_traveler_I": "星際旅行者 I",
        "interstellar_traveler_II": "星際旅行者 II",
        "interstellar_traveler_III": "星際旅行者 III",
        "interstellar_traveler_IV": "星際旅行者 IV",
        "consistent_climbers_club_I": "連續爬升俱樂部 I",
        "consistent_climbers_club_II": "連續爬升俱樂部 II",
        "consistent_climbers_club_III": "連續爬升俱樂部 III",
        "star_cluster_detector": "星團探測官",
        "starry_vigilante": "群星瞭望者",
        "planetary_decoder": "行星解碼",
        "galactic_librarian": "星系圖書館員",
        "energy_enthusiast_I": "能量狂熱者 I",
        "energy_enthusiast_II": "能量狂熱者 II",
        "energy_enthusiast_III": "能量狂熱者 III",
        "energy_enthusiast_IV": "能量狂熱者 IV",
        "knowledge_planet_explorer_I": "知識星球探險家 I",
        "knowledge_planet_explorer_II": "知識星球探險家 II",
        "scientific_expedition_explorer_I": "科學探險探險家 I",
        "scientific_expedition_explorer_II": "科學探險探險家 II",
        "cultural_celebration_explorer_I": "文化慶典探險家 I",
        "cultural_celebration_explorer_II": "文化慶典探險家 II",
        "youth_literature_explorer_I": "青春文學探險家 I",
        "youth_literature_explorer_II": "青春文學探險家 II",
        "path_to_wealth_explorer_I": "財富之路探險家 I",
        "path_to_wealth_explorer_II": "財富之路探險家 II",
        "cultivation_universe_explorer_I": "素養宇宙探險家 I",
        "cultivation_universe_explorer_II": "素養宇宙探險家 II",
        "electronic_and_information_college_explorer_I": "電資學院探險家 I",
        "electronic_and_information_college_explorer_II": "電資學院探險家 II",
        "star_warrior": "星空學霸",
    }
    print(player_info["rewards_status"])
    rewards_status = json.loads(player_info["rewards_status"])
    # rewards_status rountine_achevement sholud be removed
    return [
        (
            achivement_name_map[achievement_key],
            "完成" if achievement_value["is_completed"] else "未完成",
        )
        for achievement_key, achievement_value in rewards_status.items()
    ]


def get_current_story():
    with open("story.json", "r", encoding="utf-8") as file:
        story = json.load(file)

    storyline_date = {
        (datetime(2023, 12, 4).date(), datetime(2023, 12, 5).date()): 1,
        (datetime(2023, 12, 6).date(), datetime(2023, 12, 7).date()): 2,
        (datetime(2023, 12, 8).date(), datetime(2023, 12, 9).date()): 3,
        (datetime(2023, 12, 10).date(), datetime(2023, 12, 11).date()): 4,
        (datetime(2023, 12, 12).date(), datetime(2023, 12, 13).date()): 5,
        (datetime(2023, 12, 14).date(), datetime(2023, 12, 15).date()): 6,
        (datetime(2023, 12, 16).date(), datetime(2023, 12, 17).date()): 7,
        (datetime(2023, 12, 18).date(), datetime(2023, 12, 19).date()): 8,
        (datetime(2023, 12, 20).date(), datetime(2023, 12, 22).date()): 9,
        (datetime(2023, 12, 23).date(), datetime(2023, 12, 25).date()): 10,
        (datetime(2023, 12, 26).date(), datetime(2023, 12, 27).date()): 11,
        (datetime(2023, 12, 28).date(), datetime(2023, 12, 29).date()): 12,
    }

    def get_stage(storyline_date):
        current_date = datetime.now().date()
        for (start_date, end_date), stage in storyline_date.items():
            if start_date <= current_date <= end_date:
                return stage
        return None

    stage = get_stage(storyline_date)

    if stage:
        return gr.Slider.update(
            value=stage / 12 * 100,
            show_label=False,
            interactive=False,
            info=story[str(stage)],
        )
    else:
        return gr.Slider.update(
            value=0,
            show_label=False,
            interactive=False,
            info="狐貍貓與光束守護者的旅程將於 2023/12/04 開始!敬請期待!",
        )