Esempio n. 1
0
def result_fight(win_uid, lose_uid):
    win_real_pvp_obj = UserRealPvp.get(win_uid)
    lose_real_pvp_obj = UserRealPvp.get(lose_uid)
    print "winner  {}, loser   {}".format(win_uid, lose_uid)
    top_model = pvp_redis.get_pvp_redis(win_real_pvp_obj.user_base.subarea,
                                        top_name='real_pvp')

    pt_gap = lose_real_pvp_obj.pt - win_real_pvp_obj.pt

    win_add_pt = _calculate_win_or_lose_pt(win_real_pvp_obj.pt,
                                           pt_gap,
                                           victory=True)
    lose_deduct_pt = _calculate_win_or_lose_pt(lose_real_pvp_obj.pt,
                                               pt_gap,
                                               victory=False)

    win_pt = win_real_pvp_obj.add_pt(win_add_pt)
    #  运营活动  特定时间内收益翻倍
    game_config = win_real_pvp_obj.game_config
    game_config.reload_config()
    multiply_income_conf = game_config.operat_config.get(
        "multiply_income", {}).get("pk", {})
    win_pt = win_pt * multiply_income(multiply_income_conf)
    win_real_pvp_obj.pvp_info['total_win'] += 1
    win_real_pvp_obj.pvp_info['total_join'] += 1

    lose_pt = lose_real_pvp_obj.add_pt(lose_deduct_pt)
    lose_real_pvp_obj.pvp_info['total_lose'] += 1
    lose_real_pvp_obj.pvp_info['total_join'] += 1

    top_model.set(win_uid, win_real_pvp_obj.pt)
    top_model.set(lose_uid, lose_real_pvp_obj.pt)

    win_info = {
        'pvp_title': win_real_pvp_obj.pvp_title,
        'pt': win_real_pvp_obj.pt,
        'pvp_rank': top_model.rank(win_uid),
        'change_pt': win_pt,
        'total_win': win_real_pvp_obj.pvp_info['total_win'],
        'total_lose': win_real_pvp_obj.pvp_info['total_lose'],
    }

    lose_info = {
        'pvp_title': lose_real_pvp_obj.pvp_title,
        'pt': lose_real_pvp_obj.pt,
        'pvp_rank': top_model.rank(lose_uid),
        'change_pt': lose_pt,
        'total_win': lose_real_pvp_obj.pvp_info['total_win'],
        'total_lose': lose_real_pvp_obj.pvp_info['total_lose'],
    }

    win_real_pvp_obj.do_put()
    lose_real_pvp_obj.do_put()
    return {'win_info': win_info, 'lose_info': lose_info}
Esempio n. 2
0
def result_fight(win_uid, lose_uid):
    win_real_pvp_obj = UserRealPvp.get(win_uid)
    lose_real_pvp_obj = UserRealPvp.get(lose_uid)
    print "winner  {}, loser   {}".format(win_uid, lose_uid)
    top_model = pvp_redis.get_pvp_redis(win_real_pvp_obj.user_base.subarea, top_name='real_pvp')

    pt_gap = lose_real_pvp_obj.pt - win_real_pvp_obj.pt

    win_add_pt = _calculate_win_or_lose_pt(win_real_pvp_obj.pt, pt_gap, victory=True)
    lose_deduct_pt = _calculate_win_or_lose_pt(lose_real_pvp_obj.pt, pt_gap, victory=False)

    win_pt = win_real_pvp_obj.add_pt(win_add_pt)
    #  运营活动  特定时间内收益翻倍
    game_config = win_real_pvp_obj.game_config
    game_config.reload_config()
    multiply_income_conf = game_config.operat_config.get("multiply_income", {}).get("pk", {})
    win_pt = win_pt * multiply_income(multiply_income_conf)
    win_real_pvp_obj.pvp_info['total_win'] += 1
    win_real_pvp_obj.pvp_info['total_join'] += 1

    lose_pt = lose_real_pvp_obj.add_pt(lose_deduct_pt)
    lose_real_pvp_obj.pvp_info['total_lose'] += 1
    lose_real_pvp_obj.pvp_info['total_join'] += 1

    top_model.set(win_uid, win_real_pvp_obj.pt)
    top_model.set(lose_uid, lose_real_pvp_obj.pt)

    win_info = {
        'pvp_title': win_real_pvp_obj.pvp_title,
        'pt': win_real_pvp_obj.pt,
        'pvp_rank': top_model.rank(win_uid),
        'change_pt': win_pt,
        'total_win': win_real_pvp_obj.pvp_info['total_win'],
        'total_lose': win_real_pvp_obj.pvp_info['total_lose'],
    }

    lose_info = {
        'pvp_title': lose_real_pvp_obj.pvp_title,
        'pt': lose_real_pvp_obj.pt,
        'pvp_rank': top_model.rank(lose_uid),
        'change_pt': lose_pt,
        'total_win': lose_real_pvp_obj.pvp_info['total_win'],
        'total_lose': lose_real_pvp_obj.pvp_info['total_lose'],
    }

    win_real_pvp_obj.do_put()
    lose_real_pvp_obj.do_put()
    return {
        'win_info': win_info,
        'lose_info': lose_info
    }
Esempio n. 3
0
def enter_dungeon(rk_user, params, user_dungeon_obj, conf):
    """进入战场"""
    
    dungeon_type = params['dungeon_type']
    floor_id = params['floor_id']
    room_id = params['room_id']
    #增加进入战场打印
    print 'start_dun_%s:%s_%s_%s' % (str(rk_user.uid),dungeon_type,floor_id,room_id)

    ########  运营活动  特定时间内收益翻倍
    multiply = 1
    if dungeon_type == 'daily':
        multiply_income_conf = rk_user.game_config.operat_config.get("multiply_income", {}
        ).get("daily_dungeon", {}).get(floor_id)
        multiply = multiply_income(multiply_income_conf)
    ########  

    last_info = {}

    data = {}
    #记录战斗的唯一标识
    dungeon_uid = utils.create_gen_id()
    data['dungeon_uid'] = dungeon_uid
    last_info['dungeon_uid'] = dungeon_uid
    #新用户前7天失败不扣体力 付费用户失败不扣体力
    need_stamina = int(conf['stamina'])
    last_info['dungeon_stamina'] = need_stamina
    #计算每一个小节的敌将和掉落信息
    steps_res = calculate_steps(params, conf, rk_user, multiply)

    ########  运营活动 特定时间额外掉落物品 扫荡时也有类似逻辑  万恶的代码
    more_drop = activity.more_dungeon_drop(dungeon_type, floor_id, room_id, times=1)
    if more_drop:
        all_drop_info = steps_res['all_drop_info']
        for thing_type, things_id_num in more_drop.items():
            if thing_type == 'gold':
                steps_res['dungeon_gold'] = steps_res['dungeon_gold'] + more_drop['gold']['num']
                continue
            all_drop_info.setdefault(thing_type, {})
            for thing_id, num in things_id_num.items():
                if thing_type == 'soul':
                    if 'card' in thing_id:
                        soul_type = 'card'
                    elif 'equip' in thing_id:
                        soul_type = 'equip'
                    all_drop_info[thing_type].setdefault(soul_type, {})
                    all_drop_info[thing_type][soul_type][thing_id] = all_drop_info[thing_type][soul_type].get(thing_id, 0) + num
                else:
                    all_drop_info[thing_type][thing_id] = all_drop_info[thing_type].get(thing_id, 0) + num
    ###################  

    #格式化返回的数据
    data['all_drop_info'] = steps_res['all_drop_info']
    data['steps_info'] = steps_res['steps_info']
    data['dungeon_uid'] = last_info['dungeon_uid']
    data['exp_point'] = steps_res['exp_point']
    data['boss_id'] = conf['boss'][0]
    #将本次计算的信息作为历史信息保存
    last_info['floor_id'] = floor_id
    last_info['room_id'] = room_id
    last_info['dungeon_type'] = dungeon_type
    last_info['all_drop_info'] = steps_res['all_drop_info']
    #######################################################################################
    last_info['total_gold'] = steps_res['total_gold']
    last_info['dungeon_gold'] = steps_res['dungeon_gold']
    last_info['exp_point'] = steps_res['exp_point']
    #######################################################################################
    last_info["dungeon_data"] = data
    now = datetime.datetime.now()
    today_str = now.strftime('%Y-%m-%d')
    last_info["limit_time"] = today_str
    last_info['exp'] = steps_res['exp']

    user_dungeon_obj.dungeon_info['last'] = last_info
    user_dungeon_obj.put()
    #将结果返回给前端
    return data
Esempio n. 4
0
def enter_dungeon(rk_user, params, user_dungeon_obj, conf):
    """进入战场"""

    dungeon_type = params['dungeon_type']
    floor_id = params['floor_id']
    room_id = params['room_id']
    #增加进入战场打印
    print 'start_dun_%s:%s_%s_%s' % (str(
        rk_user.uid), dungeon_type, floor_id, room_id)

    ########  运营活动  特定时间内收益翻倍
    multiply = 1
    if dungeon_type == 'daily':
        multiply_income_conf = rk_user.game_config.operat_config.get(
            "multiply_income", {}).get("daily_dungeon", {}).get(floor_id)
        multiply = multiply_income(multiply_income_conf)
    ########

    last_info = {}

    data = {}
    #记录战斗的唯一标识
    dungeon_uid = utils.create_gen_id()
    data['dungeon_uid'] = dungeon_uid
    last_info['dungeon_uid'] = dungeon_uid
    #新用户前7天失败不扣体力 付费用户失败不扣体力
    need_stamina = int(conf['stamina'])
    last_info['dungeon_stamina'] = need_stamina
    #计算每一个小节的敌将和掉落信息
    steps_res = calculate_steps(params, conf, rk_user, multiply)

    ########  运营活动 特定时间额外掉落物品 扫荡时也有类似逻辑  万恶的代码
    more_drop = activity.more_dungeon_drop(dungeon_type,
                                           floor_id,
                                           room_id,
                                           times=1)
    if more_drop:
        all_drop_info = steps_res['all_drop_info']
        for thing_type, things_id_num in more_drop.items():
            if thing_type == 'gold':
                steps_res['dungeon_gold'] = steps_res[
                    'dungeon_gold'] + more_drop['gold']['num']
                continue
            all_drop_info.setdefault(thing_type, {})
            for thing_id, num in things_id_num.items():
                if thing_type == 'soul':
                    if 'card' in thing_id:
                        soul_type = 'card'
                    elif 'equip' in thing_id:
                        soul_type = 'equip'
                    all_drop_info[thing_type].setdefault(soul_type, {})
                    all_drop_info[thing_type][soul_type][
                        thing_id] = all_drop_info[thing_type][soul_type].get(
                            thing_id, 0) + num
                else:
                    all_drop_info[
                        thing_type][thing_id] = all_drop_info[thing_type].get(
                            thing_id, 0) + num
    ###################

    #格式化返回的数据
    data['all_drop_info'] = steps_res['all_drop_info']
    data['steps_info'] = steps_res['steps_info']
    data['dungeon_uid'] = last_info['dungeon_uid']
    data['exp_point'] = steps_res['exp_point']
    data['boss_id'] = conf['boss'][0]
    #将本次计算的信息作为历史信息保存
    last_info['floor_id'] = floor_id
    last_info['room_id'] = room_id
    last_info['dungeon_type'] = dungeon_type
    last_info['all_drop_info'] = steps_res['all_drop_info']
    #######################################################################################
    last_info['total_gold'] = steps_res['total_gold']
    last_info['dungeon_gold'] = steps_res['dungeon_gold']
    last_info['exp_point'] = steps_res['exp_point']
    #######################################################################################
    last_info["dungeon_data"] = data
    now = datetime.datetime.now()
    today_str = now.strftime('%Y-%m-%d')
    last_info["limit_time"] = today_str
    last_info['exp'] = steps_res['exp']

    user_dungeon_obj.dungeon_info['last'] = last_info
    user_dungeon_obj.put()
    #将结果返回给前端
    return data