示例#1
0
async def start_gamble(group_id):
    bot = nonebot.get_bot()
    hr = HorseRace()
    horse_list = await hr.search_horse()
    if len(horse_list) <= 4:
        await hr.set_state(1)
        response = ""
        for horse in horse_list:
            if horse[1] in HORSE_SKIN.keys():
                skin = HORSE_SKIN[horse[1]]
            else:
                skin = HORSE
            horse_line = "【%s】:%s的%s%s\n" % (horse[0], await get_nick_name(
                group_id, horse[2]), horse[1], skin)
            response += horse_line
        await bot.send_group_msg(group_id=group_id, message=response)
        delta = datetime.timedelta(seconds=60)
        trigger = DateTrigger(run_date=datetime.datetime.now() + delta)
        scheduler.add_job(
            func=start_game,
            trigger=trigger,
            args=(group_id, ),
            misfire_grace_time=60,
        )
    else:
        response = "检测到马数异常,赛马强制结束!"
        await bot.send_group_msg(group_id=group_id, message=response)
        await hr.end_race()
示例#2
0
async def join_wcr_horserace_gamble(session: CommandSession):
    hr = HorseRace()
    wcr_data = Wcr()
    player = await wcr_data.search_player(session.ctx['user_id'])
    state = await hr.race_state()
    if state == 1:
        cost = 100
        if player and player[1] >= cost:
            horse_id = session.current_arg_text.strip()
            horse_list = await hr.search_horse()
            if horse_id and 1 <= int(horse_id) <= len(horse_list):
                result = await hr.join_gamble(session.ctx['user_id'],
                                              int(horse_id))
                if result == 1:
                    response = "%s下注了%s号马!" % (get_valid_name(
                        session.ctx['sender']['card'],
                        session.ctx['sender']['nickname']), int(horse_id))
                    await wcr_data.update_player_info(player[0],
                                                      player[1] - cost,
                                                      player[2], player[3])
                else:
                    response = "您已经下过注了"
            else:
                response = "参数错误"
        else:
            response = "您尚未加入wcr或者没钱,无法赌马"
    else:
        response = "当前不在赌马阶段"
    await session.send(response)
示例#3
0
async def end_wcr_horserace(session: CommandSession):
    hr = HorseRace()
    state = await hr.race_state()
    if session.ctx['user_id'] == 463725434:
        response = "赛马结束了!"
        await hr.end_race()
    else:
        response = "无法结束赛马!"
    await session.send(response)
示例#4
0
async def end_join(group_id):
    bot = nonebot.get_bot()
    hr = HorseRace()
    state = await hr.race_state()
    if state == 0:
        horse_list = await hr.search_horse()
        if len(horse_list) > 1:
            response = "报名已结束,赌马阶段开始!1分钟内可以发送【赌马 编号】加入赌马。系统会自动扣除100宝石作为本金。\n"
            await bot.send_group_msg(group_id=group_id, message=response)
            await start_gamble(group_id)
        else:
            response = "报名人数不足,赛马结束!"
            await bot.send_group_msg(group_id=group_id, message=response)
            await hr.end_race()
示例#5
0
async def wcr_horserace_stat(session: CommandSession):
    hr = HorseRace()
    winner_list = await hr.win_rate_stat()
    list_len = len(winner_list)
    response = "胜率前三的角色是:\n"
    response += "%s:%s\n" % (winner_list[list_len - 1][0],
                             round(winner_list[list_len - 1][3], 2))
    response += "%s:%s\n" % (winner_list[list_len - 2][0],
                             round(winner_list[list_len - 2][3], 2))
    response += "%s:%s\n" % (winner_list[list_len - 3][0],
                             round(winner_list[list_len - 3][3], 2))
    response += "胜率倒数前三的角色是:\n"
    response += "%s:%s\n" % (winner_list[0][0], round(winner_list[0][3], 2))
    response += "%s:%s\n" % (winner_list[1][0], round(winner_list[1][3], 2))
    response += "%s:%s" % (winner_list[2][0], round(winner_list[2][3], 2))
    await session.send(response)
示例#6
0
async def wcr_horserace(session: CommandSession):
    hr = HorseRace()
    state = await hr.race_state()
    if state == -1:
        response = "wcr赛马现在接受报名!报名时间为1分钟!参赛上限为4人!\n报名方法为输入【出马 角色名】(e.g. 出马 毛二力)\n角色只能选择在wcr抽卡中获得的3星角色\n输入【wcr查看】可以看自己拥有哪些角色"
        await hr.set_state(0)
        delta = datetime.timedelta(seconds=60)
        trigger = DateTrigger(run_date=datetime.datetime.now() + delta)
        scheduler.add_job(
            func=end_join,
            trigger=trigger,
            args=(session.ctx['group_id'], ),
            misfire_grace_time=60,
        )
    else:
        response = "已有正在进行的赛马!"
    await session.send(response)
示例#7
0
async def mock_horserace(session: CommandSession):
    hr = HorseRace()
    wcr_data = Wcr()
    cost = 1500
    player = await wcr_data.search_player(session.ctx['user_id'])
    state = await hr.race_state()
    if state == -1:
        if player and player[1] >= cost:
            input_list = session.current_arg_text.strip().split(' ')
            if input_list and len(input_list) == 4:
                nickname_dict = await get_nickname_dict()
                for input_name in input_list:
                    if input_name in nickname_dict.keys():
                        horse_name = nickname_dict[input_name]
                    else:
                        horse_name = input_name
                    chara = await hr.get_chara_data(horse_name)
                    if chara:
                        horse = (0, horse_name, session.ctx['user_id'])
                        await hr.add_horse(horse)
                        horse_list = await hr.search_horse()
                        if len(horse_list) >= 4:
                            response = '模拟赛马即将开始!系统自动扣除1500宝石作为模拟费用!'
                            await wcr_data.update_player_info(
                                player[0], player[1] - cost, player[2],
                                player[3])
                            await hr.set_state(0)
                            await end_join(session.ctx['group_id'])
                    else:
                        response = "无法识别角色名%s" % input_name
                        await hr.end_race()
                        break
            else:
                response = "参数错误。请输入要出马的4个角色并用空格分隔。"
        else:
            response = "您尚未加入wcr或者没钱,无法模拟赛马"
    else:
        response = "已有正在进行的赛马!"
    await session.send(response)
示例#8
0
async def resolve_gamble(group_id, champ_list):
    bot = nonebot.get_bot()
    hr = HorseRace()
    wcr_data = Wcr()
    cost = 100
    gamble_player_list = await hr.search_gamble()
    pool = cost * len(gamble_player_list)
    win_player_list = list()
    response = "赌马获胜的玩家是:\n"
    for horse in champ_list:
        for player in gamble_player_list:
            if player[1] == horse[0]:
                response += "%s\n" % await get_nick_name(group_id, player[0])
                win_player_list.append(player)
    if len(win_player_list) == 0:
        response += "真遗憾,无人获胜!%s宝石消失在虚空之中。" % pool
    else:
        money = pool // len(win_player_list)
        response += "每人获得了奖金%s宝石" % money
        for win_player in win_player_list:
            await wcr_data.send_money_to_player(win_player[0], money)
    await bot.send_group_msg(group_id=group_id, message=response)
示例#9
0
async def join_wcr_horserace(session: CommandSession):
    hr = HorseRace()
    wcr_data = Wcr()
    player = await wcr_data.search_player(session.ctx['user_id'])
    state = await hr.race_state()
    if state == 0:
        if player:
            horse = await hr.search_horse_by_player(session.ctx['user_id'])
            if horse:
                response = "您已加入了赛马。"
            else:
                input_name = session.current_arg_text.strip()
                if input_name:
                    nickname_dict = await get_nickname_dict()
                    if input_name in nickname_dict.keys():
                        horse_name = nickname_dict[input_name]
                    else:
                        horse_name = input_name
                    chara = await wcr_data.search_chara(
                        session.ctx['user_id'], horse_name)
                    if chara:
                        response = "%s派出了%s进行赛马!" % (get_valid_name(
                            session.ctx['sender']['card'],
                            session.ctx['sender']['nickname']), horse_name)
                        await hr.add_horse(chara)
                        horse_list = await hr.search_horse()
                        if len(horse_list) >= 4:
                            await end_join(session.ctx['group_id'])
                    else:
                        response = "您没有叫做%s的角色。输入【wcr查看】看看自己有哪些3星吧!" % input_name
                else:
                    response = "参数错误"
        else:
            response = "您尚未加入wcr,无法赛马"
    else:
        response = "当前不在报名阶段"
    await session.send(response)
示例#10
0
async def start_game(group_id):
    bot = nonebot.get_bot()
    hr = HorseRace()
    state = await hr.race_state()
    current_round = state
    response = "行动阶段#%s\n" % current_round
    horse_list = await hr.search_horse()
    for horse in horse_list:
        move = await hr.move_horse(horse[0])
        if move > 0:
            response += "%s的%s向前冲了%s步!\n" % (await get_nick_name(
                group_id, horse[2]), horse[1], move)
        else:
            response += "%s的%s摸鱼了!\n" % (await get_nick_name(
                group_id, horse[2]), horse[1])
    response += "战斗阶段\n"
    r = random.randint(1, 8)
    if r <= 3:
        response += "上帝鸽了\n"
    else:
        response += await hr.god_attack(group_id)
    ub_list = await hr.search_sorted_horse_ascend()
    for horse in ub_list:
        if horse[4] >= 100:
            response += await hr.ub(horse, group_id)
    response += "最终状态\n"
    horse_list = await hr.search_horse()
    champ_list = list()
    for horse in horse_list:
        if horse[1] in HORSE_SKIN.keys():
            skin = HORSE_SKIN[horse[1]]
        else:
            skin = HORSE
        horse_line = "[CQ:emoji,id=%s]:" % (10000048 + horse[0]) + "=" * (
            horse[3] - 1) + skin + "=" * (10 - horse[3]) + "\n"
        response += horse_line
        if horse[3] == 10:
            champ_list.append(horse)
    await bot.send_group_msg(group_id=group_id, message=response)
    if len(champ_list) > 0:
        response = "赛马结束了!恭喜\n"
        for horse in champ_list:
            response += "%s的%s\n" % (await get_nick_name(group_id,
                                                         horse[2]), horse[1])
            await hr.add_winner(horse[1])
        response += "获得了冠军!"
        for horse in horse_list:
            await hr.add_race(horse[1])
        await bot.send_group_msg(group_id=group_id, message=response)
        await resolve_gamble(group_id, champ_list)
        await hr.end_race()
    else:
        await hr.set_state(current_round + 1)
        delta = datetime.timedelta(seconds=10)
        trigger = DateTrigger(run_date=datetime.datetime.now() + delta)
        scheduler.add_job(
            func=start_game,
            trigger=trigger,
            args=(group_id, ),
            misfire_grace_time=60,
        )