Files
Arcaea-server/latest version/server/mission.py
Lost-MSth d65cc3bcbe [Enhance] Missions & ETR
- Add support for missions
- PTT mechanism: Change first play protection to new best protection
- Adapt to the new difficulty ETR
- Uncap DORO*C
- Incomplete support for "pick_ticket"
- Fix requirements: cryptography >= 35.0.0

Note: This is an intermediate test version, only for Arcaea 5.4.0c. Next version will adapt to 5.4.0.
2024-03-10 11:26:21 +08:00

69 lines
1.8 KiB
Python

from flask import Blueprint, request
from core.error import NoData
from core.mission import MISSION_DICT
from core.sql import Connect
from core.user import UserOnline
from .auth import auth_required
from .func import arc_try, success_return
bp = Blueprint('mission', __name__, url_prefix='/mission')
def parse_mission_form(multidict) -> list:
r = []
x = multidict.get('mission_1')
i = 1
while x:
r.append(x)
x = multidict.get(f'mission_{i + 1}')
i += 1
return r
@bp.route('/me/clear', methods=['POST']) # 新手任务确认完成
@auth_required(request)
@arc_try
def mission_clear(user_id):
m = parse_mission_form(request.form)
r = []
for i, mission_id in enumerate(m):
if mission_id not in MISSION_DICT:
return NoData(f'Mission `{mission_id}` not found')
with Connect() as c:
x = MISSION_DICT[mission_id](c)
x.user_clear_mission(UserOnline(c, user_id))
d = x.to_dict()
d['request_id'] = i + 1
r.append(d)
return success_return({'missions': r})
@bp.route('/me/claim', methods=['POST']) # 领取新手任务奖励
@auth_required(request)
@arc_try
def mission_claim(user_id):
m = parse_mission_form(request.form)
r = []
with Connect() as c:
user = UserOnline(c, user_id)
for i, mission_id in enumerate(m):
if mission_id not in MISSION_DICT:
return NoData(f'Mission `{mission_id}` not found')
x = MISSION_DICT[mission_id](c)
x.user_claim_mission(user)
d = x.to_dict(has_items=True)
d['request_id'] = i + 1
r.append(d)
return success_return({
'missions': r,
'user': user.to_dict()
})