mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-13 19:57:26 +08:00
[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.
This commit is contained in:
68
latest version/server/mission.py
Normal file
68
latest version/server/mission.py
Normal file
@@ -0,0 +1,68 @@
|
||||
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()
|
||||
})
|
||||
Reference in New Issue
Block a user