Пример #1
0
async def combat_status(bot: Bot, event: MessageEvent, state: dict):
    combat: Combat = state['combat']
    if not combat or combat.state == CombatState.ENDED:
        await combat_cmd.finish(
            f'战斗轮指示器未激活。\n'
            f'- 使用指令「{event.raw_message.strip()[0]}combat start」开启一场新战斗。')
        return
    # await combat_cmd.send(Message(MessageSegment.xml(await combat_bot_ctl.format_combat_xml(combat))))
    await combat_cmd.send(
        MessageSegment.share(
            f'https://www.epicteller.com/combat/{combat.url_token}'))
    if combat.state == CombatState.INITIATING:
        if len(combat.order.order_list) == 0:
            status_msg = '还没有人进入先攻顺位。'
        else:
            status_msg = f'已有 {len(combat.order.order_list)} 人进入先攻顺位。'
        await combat_cmd.finish(
            f'当前战斗正处于先攻阶段,投掷先攻骰来决定先攻顺序。\n{status_msg}\n'
            f'- 使用指令「{event.raw_message.strip()[0]}combat run」进入行动阶段。')
        return
    # combat.state == CombatState.RUNNING
    token = combat.tokens[combat.order.current_token_name]
    player_name = await combat_bot_ctl.format_token_message(token)
    message = Message(f'当前正在战斗中。\n'  # TODO: 这里应该有个卡片消息实时显示战斗轮。
                      f'第 {combat.order.round_count} 回合,{player_name} 正在行动中。\n'
                      f'- 使用指令「{event.raw_message.strip()[0]}combat end」结束战斗。')
    await combat_cmd.finish(message)
Пример #2
0
async def combat_start(bot: Bot, event: MessageEvent, state: dict):
    room: Room = state['room']
    try:
        combat = await combat_ctl.start_new_combat(room)
    except error.combat.CombatRunningError:
        await combat_cmd.finish('❌ 当前战斗还在进行中。')
        return
    await combat_cmd.send(
        MessageSegment.share(
            f'https://www.epicteller.com/combat/{combat.url_token}'))
    await combat_cmd.finish(
        f'进入先攻阶段,战斗轮指示器已激活。\n'
        f'投掷先攻骰来决定先攻顺序。\n'
        f'- 在战斗的任意时刻,使用指令「{event.raw_message.strip()[0]}combat」检查战斗状态。\n'
        f'- 使用指令「{event.raw_message.strip()[0]}combat run」进入行动阶段。')