Esempio n. 1
0
def recover_stamina(rk_user, params):
    """花费元宝回复体力
    
    每次回复的体力值是固定的,但消耗的元宝数
    是根据当天第几次回体配置的
    """
    user_property_obj = rk_user.user_property
    recover_stamina = game_config.system_config['coin_recover_stamina']
    has_recover_times = user_property_obj.property_info['recover_times'][
        'recover_stamina']
    need_coin = game_config.system_config['recover_stamina_need'][
        has_recover_times + 1]

    # 检查用户体力是否已满
    if user_property_obj.max_recover():
        raise GameLogicError('user', 'max_recover')
    # 检查vip可以回复的次数到了没
    vip.check_limit_recover(rk_user, 'recover_stamina')

    # 检查用户coin是否足够 并扣钱
    if not user_property_obj.minus_coin(need_coin, 'recover_stamina'):
        raise GameLogicError('user', 'not_enough_coin')
    # 添加回复次数
    user_property_obj.add_recover_times('recover_stamina')
    user_property_obj.add_stamina(recover_stamina)
    return {}
Esempio n. 2
0
def recover_copy():
    """
    * 重置副本次数
    """
    rk_user = UserBase.get(uid)
    recover_copy_coin = game_config.system_config['recover_copy_coin']
    #检查vip可以回复的次数到了没
    if not vip.check_limit_recover(rk_user,'recover_copy'):
        return 11,{'msg':utils.get_msg('user','max_recover_copy_times')}
    else:
        try:
            #检测参数是否合法
            dungeon_type = 'normal' 
            floor_id = '1' 
            room_id  = '1' 
        except:
            return 11,{'msg':utils.get_msg('dungeon','invalid_dungeon_info')}
        #检查用户coin是否足够
        if not rk_user.user_property.minus_coin(recover_copy_coin, 'recover_copy'):
            return 11,{'msg':utils.get_msg('user','not_enough_coin')}
        #添加回复次数
        rk_user.user_property.add_recover_times('recover_copy',dungeon_type)
        user_dungeon_obj = UserDungeon.get(rk_user.uid)
        user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id)

        rk_user.user_property.do_put()
        user_dungeon_obj.do_put()
        return 0,{}
Esempio n. 3
0
def recover_stamina(rk_user, params):
    """花费元宝回复体力
    
    每次回复的体力值是固定的,但消耗的元宝数
    是根据当天第几次回体配置的
    """
    user_property_obj = rk_user.user_property
    recover_stamina = game_config.system_config["coin_recover_stamina"]
    has_recover_times = user_property_obj.property_info["recover_times"]["recover_stamina"]
    need_coin = game_config.system_config["recover_stamina_need"][has_recover_times + 1]

    # 检查用户体力是否已满
    if user_property_obj.max_recover():
        raise GameLogicError("user", "max_recover")
    # 检查vip可以回复的次数到了没
    vip.check_limit_recover(rk_user, "recover_stamina")

    # 检查用户coin是否足够 并扣钱
    if not user_property_obj.minus_coin(need_coin, "recover_stamina"):
        raise GameLogicError("user", "not_enough_coin")
    # 添加回复次数
    user_property_obj.add_recover_times("recover_stamina")
    user_property_obj.add_stamina(recover_stamina)
    return {}
Esempio n. 4
0
def recover_copy(rk_user, params):
    """重置副本可挑战次数
    
    Args:
        dungeon_type: 战场类型 (normal 普通战场/ daily试炼)  
        floor_id
        room_id   (试炼可无)
    """
    #检测参数是否合法
    dungeon_type = params['dungeon_type']
    floor_id = params['floor_id']
    room_id = params.get('room_id', '')
    if room_id:
        where = 'recover_copy_' + "_".join([dungeon_type, floor_id, room_id])
    else:
        where = 'recover_copy_' + "_".join([dungeon_type, floor_id])

    # 检查vip可以回复的次数到了没
    has_recover_times = vip.check_limit_recover(rk_user, 'recover_copy',
                                                dungeon_type, floor_id)
    next_recover_times = has_recover_times + 1
    if dungeon_type == 'normal':
        recover_conf = game_config.system_config['recover_normal_copy_need']
    elif dungeon_type == 'daily':
        recover_conf = game_config.system_config['recover_daily_copy_need']
    # 检查重置次数是否达到上限
    if next_recover_times not in recover_conf:
        raise GameLogicError('dungeon', 'reach_max_recover_%s' % dungeon_type)

    #检查用户coin是否足够
    recover_need_coin = recover_conf[next_recover_times]
    if not rk_user.user_property.minus_coin(recover_need_coin, where):
        return 11, {'msg': utils.get_msg('user', 'not_enough_coin')}
    #添加回复次数
    rk_user.user_property.add_recover_times('recover_copy', dungeon_type,
                                            floor_id)
    user_dungeon_obj = UserDungeon.get(rk_user.uid)
    user_dungeon_obj.recover_copy(dungeon_type, floor_id, room_id)

    return {}
Esempio n. 5
0
def recover_copy(rk_user, params):
    """重置副本可挑战次数
    
    Args:
        dungeon_type: 战场类型 (normal 普通战场/ daily试炼)  
        floor_id
        room_id   (试炼可无)
    """
    #检测参数是否合法
    dungeon_type = params['dungeon_type']
    floor_id = params['floor_id']
    room_id  = params.get('room_id', '')
    if room_id:
        where = 'recover_copy_' + "_".join([dungeon_type, floor_id, room_id])
    else:
        where = 'recover_copy_' + "_".join([dungeon_type, floor_id])

    # 检查vip可以回复的次数到了没
    has_recover_times = vip.check_limit_recover(rk_user,'recover_copy', dungeon_type, floor_id)
    next_recover_times = has_recover_times + 1
    if dungeon_type == 'normal':
        recover_conf = game_config.system_config['recover_normal_copy_need']
    elif dungeon_type == 'daily':
        recover_conf = game_config.system_config['recover_daily_copy_need']
    # 检查重置次数是否达到上限
    if next_recover_times not in recover_conf:
        raise GameLogicError('dungeon', 'reach_max_recover_%s' % dungeon_type)

    #检查用户coin是否足够
    recover_need_coin = recover_conf[next_recover_times]
    if not rk_user.user_property.minus_coin(recover_need_coin, where):
        return 11,{'msg':utils.get_msg('user', 'not_enough_coin')}
    #添加回复次数
    rk_user.user_property.add_recover_times('recover_copy', dungeon_type, floor_id)
    user_dungeon_obj = UserDungeon.get(rk_user.uid)
    user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id)

    return {}
Esempio n. 6
0
def refresh_store_by_self():
    """
    玩家主动刷新时  调用此接口
    params  参数需包含 store_type :  "gold_store"  or  "coin_store"
    """
    game_config.subareas_conf()
    game_config.set_subarea('1') 
    store_type_list = ['coin_store','fight_soul_store']
    needed_cost = game_config.mystery_store["store_refresh_cost"]
    user_property_obj = UserProperty.get_instance(uid)
    # 消耗元宝
    minus_func = getattr(user_property_obj, "minus_coin")

    #根据vip刷新次数
    if not vip.check_limit_recover(user_property_obj,'recover_mystery_store'):
        return 11,{'msg':utils.get_msg('user','max_times')}
    #回复次数+1
    user_property_obj.add_recover_times('recover_mystery_store')
    # 再判断是否 coin or gold  足够
    if not minus_func(needed_cost, 'refresh_mystery_store'):
        return 11,{'msg': utils.get_msg('user', 'not_enough_coin')}
    # 记录 消费元宝log
    #data_log_mod.set_log("ConsumeRecord", rk_user, 
    #                        lv=rk_user.user_property.lv,
    #                        num=needed_cost,
    #                        consume_type='refresh_coin_store',
    #                        before_coin=rk_user.user_property.coin + needed_cost,
    #                        after_coin=rk_user.user_property.coin
    #)

    user_mystery_store_obj = UserMysteryStore.get_instance(uid)
    for store_type  in store_type_list:
        user_mystery_store_obj.refresh_store(store_type)
    #return 0, _pack_store_info(user_mystery_store_obj.store_info())
    k = _pack_store_info(user_mystery_store_obj.store_info())
    print 'data=',json.dumps(k,indent=1)
Esempio n. 7
0
def refresh_store_by_self(rk_user,params):
    """
    玩家主动刷新时  调用此接口
    1. 若有免费刷新次数, 消耗刷新次数
    2. 若有刷新令, 消耗刷新令28_props
    3. 以上都没有, 用元宝刷新

    """
    user_property_obj = rk_user.user_property

    user_mystery_store_obj = rk_user.user_mystery_store
    user_pack_obj = rk_user.user_pack
    needed_cost = int(game_config.mystery_store_config["store_refresh_cost"])

    props_config = game_config.props_config
    refresh_mystery_props_id = ''
    #获取用户的道具配置
    for props_id in props_config:
        if props_config[props_id].get('used_by','') == 'refresh_mystery':
            refresh_mystery_props_id = props_id

    if user_mystery_store_obj.free_refresh_cnt:
        user_mystery_store_obj.free_refresh_cnt -= 1
        user_mystery_store_obj.put()
    elif user_pack_obj.has_props(refresh_mystery_props_id):
        user_pack_obj.minus_props(refresh_mystery_props_id, 1, 'refresh_mystery_store')
    # 根据vip用元宝可刷新次数判断是否可以刷新
    elif vip.check_limit_recover(rk_user, 'recover_mystery_store') >= 0 and \
         user_property_obj.minus_coin(needed_cost, 'refresh_mystery_store'):
        # 已刷新次数+1
        user_property_obj.add_recover_times('recover_mystery_store')        
    else:
        raise GameLogicError('user', 'not_enough_coin')
    
    user_mystery_store_obj.refresh_store()
    return _pack_store_info(user_mystery_store_obj.store_info())