Esempio n. 1
0
def __calculate_loopgap_dungeon_time(floor_conf):
    """
    计算循环战场还有多长时间开启
    """
    time_now = datetime.datetime.now()
    time_now_str = utils.datetime_toString(time_now)
    return_start_time = floor_conf["start_time"]
    return_end_time = floor_conf["end_time"]
    loop_gap = int(floor_conf["loop_gap"])
    if return_start_time[:10] > time_now_str[:10]:
        return_end_time = return_start_time[:10] + floor_conf["end_time"][10:]
    else:
        temp_today = utils.string_toDatetime(time_now_str[:10] + " 00:00:00")
        temp_start = utils.string_toDatetime(floor_conf["start_time"][:10] + " 00:00:00")
        # 小时数分钟数未到时间并且当天是循环开放时间,则给当天时间
        delta_days = (temp_today - temp_start).days
        if time_now_str[10:] < return_end_time[10:] and not delta_days % loop_gap:
            return_start_time = time_now_str[:10] + floor_conf["start_time"][10:]
            return_end_time = time_now_str[:10] + floor_conf["end_time"][10:]
        else:
            # 则计算后面开放时间
            _start_time = temp_today + datetime.timedelta(days=loop_gap - delta_days % loop_gap)
            _start_time = utils.datetime_toString(_start_time)
            return_start_time = _start_time[:10] + floor_conf["start_time"][10:]
            return_end_time = _start_time[:10] + floor_conf["end_time"][10:]
    next_start_time = utils.datetime_toString(
        utils.string_toDatetime(return_start_time) + datetime.timedelta(days=loop_gap)
    )
    next_end_time = utils.datetime_toString(
        utils.string_toDatetime(return_end_time) + datetime.timedelta(days=loop_gap)
    )
    return (return_start_time, return_end_time), (next_start_time, next_end_time)
Esempio n. 2
0
 def set_name(cls, uid=None, name=None,createtime=datetime.datetime.now()):
     obj = cls()
     obj.uid = uid
     obj.createtime = datetime_toString(createtime)
     obj.name = name
     #插入,如果有重复会报异常
     obj.insert()
Esempio n. 3
0
 def set_name(cls, uid=None, name=None, createtime=datetime.datetime.now()):
     obj = cls()
     obj.uid = uid
     obj.createtime = datetime_toString(createtime)
     obj.name = name
     #插入,如果有重复会报异常
     obj.insert()
Esempio n. 4
0
def receive(rk_user, params):
    '''
    领取邮件中的内容
    '''
    mails_id = str(params['mails_id'])
    all_info = UserMail.hgetall(rk_user.uid)
    return_info = {}
    for m in all_info:
        mid = all_info[m]['mail_info']['mid']
        if mid == mails_id:
            can_get = all_info[m]['mail_info'].get('can_get', False)
            if can_get is False:
                break
            awards = all_info[m]['mail_info']['awards']
            where = 'mail_' + all_info[m]['mail_info']['title']
            return_info = tools.add_things(rk_user, [{
                "_id": goods,
                "num": awards[goods]
            } for goods in awards if goods], where)

            umobj = UserMail.hget(rk_user.uid, m)
            umobj.mail_info['can_get'] = False
            umobj.mail_info['open_time'] = utils.datetime_toString(
                datetime.datetime.now())
            umobj.hput()
            break

    return 0, {'receive': return_info}
Esempio n. 5
0
 def __can_get_supercategory(self,where):
     """
     是否可以获取超类型
     """
     if not where:
         return False
     if 'gacha' in where or 'free_multi' in where:
         source_type = 'gacha'
     elif 'dungeon_' in where:
         source_type = 'dungeon'
     elif 'soul_exchange' in where:
         source_type = 'soul_exchange'
     else:
         return False
     supercategory_card_source = self.game_config.gacha_config.get('supercategory_card_source',{})
     if not supercategory_card_source:
         return False
     source_type_time = supercategory_card_source.get(source_type,[])
     if not source_type_time:
         return False
     now_str = utils.datetime_toString(datetime.datetime.now())
     if source_type_time[0] <= now_str <= source_type_time[1]:
         return True
     else:
         return False
Esempio n. 6
0
def mi_create_orderid(request):
    """
    给前段返回一个唯一的小米订单号,并记录在 OrderRecord 表
    """
    rk_user = request.rk_user
    item_id = request.REQUEST.get('item_id', None)
    if not item_id:
        data = {
            'rc':12,
            'result':u'没有物品id',
            'data':{'msg':get_msg('charge','fail'),'server_now':int(time.time())},
        }
        return HttpResponse(
            json.dumps(data, indent=1),
            content_type='application/x-javascript',
        )
    oid = "mi" + rk_user.uid + str(time.time())

    #作记录
    record_data = {
                    "oid":oid,
                    "uid":rk_user.uid,
                    "item_id":item_id,
                    "createtime":datetime_toString(datetime.datetime.now()),
                  }
    data_log_mod.set_log('OrderRecord', rk_user, **record_data)
    data = {
        'rc': 0,
        'data': {'oid': oid, 'server_now': int(time.time())},
    }
    return HttpResponse(
        json.dumps(data, indent=1),
        content_type='application/x-javascript',
    )
Esempio n. 7
0
 def __can_get_supercategory(self, where):
     """
     是否可以获取超类型
     """
     if not where:
         return False
     if 'gacha' in where or 'free_multi' in where:
         source_type = 'gacha'
     elif 'dungeon_' in where:
         source_type = 'dungeon'
     elif 'soul_exchange' in where:
         source_type = 'soul_exchange'
     else:
         return False
     supercategory_card_source = self.game_config.gacha_config.get(
         'supercategory_card_source', {})
     if not supercategory_card_source:
         return False
     source_type_time = supercategory_card_source.get(source_type, [])
     if not source_type_time:
         return False
     now_str = utils.datetime_toString(datetime.datetime.now())
     if source_type_time[0] <= now_str <= source_type_time[1]:
         return True
     else:
         return False
Esempio n. 8
0
def more_dungeon_drop(dungeon_type, floor_id, room_id, times=1):
    """  运营活动 特定时间   指定战场 额外掉落物品

    Args:
        dungeon_type   战场类型 
        floor_id
        room_id
        times          需要随机掉落几次

    Retruns:
        {
            'card':{
                '1_card': 4,
                '2_card': 5,
            },
            'soul':{
                '1_card': 10,
                '2_equip_1': 1,
            },
            'gold':{
                'gold': 50,
            }
            .....

        }
    """
    more_drop_conf = game_config.operat_config.get('more_drop_conf')
    if not more_drop_conf:
        return {}
    drop_info = {}
    for each_conf in more_drop_conf.values():
        now_str = datetime_toString(datetime.datetime.now())
        start_time = each_conf.get("start_time", 0)
        end_time = each_conf.get("end_time", 0)
        # 开发时间
        if now_str > end_time or now_str < start_time:
            continue
        # 指定战场类型开放
        if not dungeon_type in each_conf.get('dungeon', {}):
            continue
        # 指定战场开放
        if each_conf['dungeon'][dungeon_type] != 'all' and '-'.join(
            [floor_id, room_id]) not in each_conf['dungeon'][dungeon_type]:
            continue
        for thing_id, thing_drop_conf in each_conf.get('drop_things',
                                                       {}).items():
            num = 0
            for cnt in range(times):
                if not utils.is_happen(thing_drop_conf.get('drop_rate', 0)):
                    continue
                num += utils.get_item_by_random_simple(thing_drop_conf['num'])
            if num > 0:
                thing_type = thing_drop_conf['type']
                drop_info.setdefault(thing_type, {})
                thing_id = thing_id.replace('Soul', '')
                drop_info[thing_type][thing_id] = drop_info[thing_type].get(
                    thing_id, 0) + num
    return drop_info
Esempio n. 9
0
def more_dungeon_drop(dungeon_type, floor_id, room_id, times=1):
    """  运营活动 特定时间   指定战场 额外掉落物品

    Args:
        dungeon_type   战场类型 
        floor_id
        room_id
        times          需要随机掉落几次

    Retruns:
        {
            'card':{
                '1_card': 4,
                '2_card': 5,
            },
            'soul':{
                '1_card': 10,
                '2_equip_1': 1,
            },
            'gold':{
                'gold': 50,
            }
            .....

        }
    """
    more_drop_conf = game_config.operat_config.get('more_drop_conf')
    if not more_drop_conf:
        return {}
    drop_info = {}
    for each_conf in more_drop_conf.values():
        now_str = datetime_toString(datetime.datetime.now())
        start_time = each_conf.get("start_time", 0)
        end_time = each_conf.get("end_time", 0)
        # 开发时间
        if now_str > end_time or now_str < start_time:
            continue
        # 指定战场类型开放
        if not dungeon_type in each_conf.get('dungeon', {}):
            continue
        # 指定战场开放
        if each_conf['dungeon'][dungeon_type] != 'all' and '-'.join([floor_id, room_id]) not in each_conf['dungeon'][dungeon_type]:
            continue
        for thing_id, thing_drop_conf in each_conf.get('drop_things', {}).items():
            num = 0
            for cnt in range(times):
                if not utils.is_happen(thing_drop_conf.get('drop_rate', 0)):
                    continue
                num += utils.get_item_by_random_simple(thing_drop_conf['num'])
            if num > 0:
                thing_type = thing_drop_conf['type']
                drop_info.setdefault(thing_type, {})
                thing_id = thing_id.replace('Soul', '')
                drop_info[thing_type][thing_id] = drop_info[thing_type].get(thing_id, 0) + num
    return drop_info
Esempio n. 10
0
def new_get_charge_award_info(rk_user, params):
    """
    用户最接近的充值礼包信息
    """
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and 'charge_award' in game_config.android_config:
        charge_award = game_config.android_config['charge_award']
    else:
        charge_award = game_config.shop_config.get('charge_award', {})
    charge_award_copy = copy.deepcopy(charge_award)
    charge_award_info = rk_user.user_property.charge_award_info
    for gift_id in charge_award:
        gift_conf = charge_award_copy[gift_id]
        start_time = gift_conf.get('start_time')
        end_time = gift_conf.get('end_time', '2111-11-11 11:11:11')
        now_str = utils.datetime_toString(datetime.datetime.now())
        #未开放或已过期的礼包
        if now_str > end_time or now_str < start_time:
            charge_award_copy.pop(gift_id)
    if not charge_award_copy:
        return 11, {'msg': utils.get_msg('active', 'not_open')}
    gift_list = []
    end_time = None
    for gift_id in charge_award_copy:
        end_time = charge_award_copy[gift_id]['end_time']
        if gift_id in charge_award_info:
            has_charge_coin = charge_award_info[gift_id]['charge_coin']
        else:
            has_charge_coin = 0
        diff_charge_coin = charge_award_copy[gift_id][
            'charge_coin'] - has_charge_coin
        need_charge_coin = max(0, diff_charge_coin)
        tmp_dic = {
            'need_charge_coin': need_charge_coin,
            'now_charge_coin': has_charge_coin,
            'award': charge_award_copy[gift_id]['award'],
            'desc': charge_award_copy[gift_id].get('desc', ''),
            'charge_coin': charge_award_copy[gift_id]['charge_coin'],
            'name': charge_award_copy[gift_id].get('name', ''),
        }
        gift_list.append(tmp_dic)
    gift_list = sorted(gift_list, key=lambda x: x['charge_coin'])
    now_gift_id = len(gift_list) - 1
    found = False
    for i in range(len(gift_list)):
        if not found and gift_list[i]['need_charge_coin'] > 0:
            now_gift_id = i
            found = True
        gift_list[i].pop('charge_coin')
    data = {
        'gift_list': gift_list,
        'gift_index': now_gift_id,
        'end_time': end_time,
    }
    return 0, data
Esempio n. 11
0
    def get_consume_award(self, coin):
        try:
            #获取运营配置的消耗奖励
            consume_award_conf = copy.deepcopy(
                self.game_config.operat_config.get("consume_award"))
            if not consume_award_conf:
                return
            #获取消耗奖励的内容
            user_property_obj = UserProperty.get(self.uid)
            consume_award_info = user_property_obj.consume_award_info
            old_consume_award_info = copy.deepcopy(consume_award_info)
            #遍历查找奖励内容
            for gift_id in consume_award_conf:
                gift_conf = consume_award_conf[gift_id]
                start_time = gift_conf.get('start_time')
                end_time = gift_conf.get('end_time', '2111-11-11 11:11:11')
                now_str = datetime_toString(datetime.datetime.now())
                #未开放或已过期的礼包
                if now_str > end_time or now_str < start_time:
                    continue
                if gift_id not in consume_award_info:
                    consume_award_info[gift_id] = {
                        'consume_coin': coin,
                        'has_got_cnt': 0,  # 已领取的次数
                    }
                else:
                    consume_award_info[gift_id]['consume_coin'] += coin

                #金额未达到
                if consume_award_info[gift_id]['consume_coin'] - gift_conf.get(
                        'consume_coin', 0) < 0:
                    continue
                #满足条件,发奖励

                #已经领取过的礼包
                print('chenhaiou gift_id: ', gift_id)
                # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin']
                for cnt in range(consume_award_info[gift_id]['consume_coin'] /
                                 gift_conf.get('consume_coin', 0)):
                    consume_award_info[gift_id]['has_got_cnt'] += 1
                    if gift_conf.get('award', []):
                        msg = gift_conf.get('name', '') + utils.get_msg(
                            'operat', 'consume_award', self).format(
                                gift_conf.get('consume_coin', 0))
                        for award_warp in gift_conf['award'].values():
                            award = utils.get_item_by_random_simple(award_warp)
                            self.add_gift_by_dict(award, msg)
                consume_award_info[gift_id]['consume_coin'] %= gift_conf.get(
                    'consume_coin', 0)
            if old_consume_award_info != consume_award_info:
                user_property_obj.put()
        except:
            print traceback.format_exc()
Esempio n. 12
0
def __record_month_item(rk_user,item_id,item_info):
    """
    记录月卡信息        
    """
    today = datetime.date.today()
    product_id = item_id.split('.')[-1]
    today_str = datetime_toString(today,'%Y-%m-%d')
    month_item_info = rk_user.user_property.month_item_info
    should_end_time = datetime_toString(today + datetime.timedelta(days=29),'%Y-%m-%d')
    if product_id not in month_item_info:
        month_item_info[product_id] = {
                                        'can_buy':False,#可以购买
                                        'charge_date':[today_str],#购买日期
                                        'can_get_today': False,#领奖开始时间
                                        'start_time':today_str,#领奖开始时间
                                        'end_time':should_end_time,#领奖结束时间
                                       }
    else:
        month_item_info[product_id]['charge_date'].insert(0,today_str)
        month_item_info[product_id]['charge_date'] = month_item_info[product_id]['charge_date'][:5]
        month_item_info[product_id]['can_buy'] = False
        #第一次买或者领奖期限已过
        if not month_item_info[product_id]['end_time'] or today_str >= month_item_info[product_id]['end_time']:
            month_item_info[product_id]['start_time'] = today_str
            month_item_info[product_id]['end_time'] = should_end_time
        else:
            end_time_date = string_toDatetime(month_item_info[product_id]['end_time'],'%Y-%m-%d')
            month_item_info[product_id]['end_time'] = datetime_toString(end_time_date + datetime.timedelta(days=30),'%Y-%m-%d')
    #发首日奖励
    first_day_bonus = item_info.get('first_day_bonus',{})
    if first_day_bonus:
        month_card_award = get_msg('operat', 'month_card_award')
        if month_card_award and product_id in month_card_award:
            content = month_card_award[product_id].get('month_today_award','')
        else:
            content = ''
        rk_user.user_gift.add_gift(first_day_bonus,content)
    rk_user.user_property.put()
Esempio n. 13
0
def __calculate_loopgap_dungeon_time(floor_conf):
    """
    计算循环战场还有多长时间开启
    """
    time_now = datetime.datetime.now()
    time_now_str = utils.datetime_toString(time_now)
    return_start_time = floor_conf['start_time']
    return_end_time = floor_conf['end_time']
    loop_gap = int(floor_conf['loop_gap'])
    if return_start_time[:10] > time_now_str[:10]:
        return_end_time = return_start_time[:10] + floor_conf['end_time'][10:]
    else:
        temp_today = utils.string_toDatetime(time_now_str[:10] + ' 00:00:00')
        temp_start = utils.string_toDatetime(floor_conf['start_time'][:10] +
                                             ' 00:00:00')
        #小时数分钟数未到时间并且当天是循环开放时间,则给当天时间
        delta_days = (temp_today - temp_start).days
        if time_now_str[10:] < return_end_time[10:] and\
        not delta_days % loop_gap:
            return_start_time = time_now_str[:10] + floor_conf['start_time'][
                10:]
            return_end_time = time_now_str[:10] + floor_conf['end_time'][10:]
        else:
            #则计算后面开放时间
            _start_time = temp_today + datetime.timedelta(
                days=loop_gap - delta_days % loop_gap)
            _start_time = utils.datetime_toString(_start_time)
            return_start_time = _start_time[:10] + floor_conf['start_time'][10:]
            return_end_time = _start_time[:10] + floor_conf['end_time'][10:]
    next_start_time = utils.datetime_toString(
        utils.string_toDatetime(return_start_time) +
        datetime.timedelta(days=loop_gap))
    next_end_time = utils.datetime_toString(
        utils.string_toDatetime(return_end_time) +
        datetime.timedelta(days=loop_gap))
    return (return_start_time, return_end_time), (next_start_time,
                                                  next_end_time)
Esempio n. 14
0
def new_get_charge_award_info(rk_user, params):
    """
    用户最接近的充值礼包信息
    """
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and "charge_award" in game_config.android_config:
        charge_award = game_config.android_config["charge_award"]
    else:
        charge_award = game_config.shop_config.get("charge_award", {})
    charge_award_copy = copy.deepcopy(charge_award)
    charge_award_info = rk_user.user_property.charge_award_info
    for gift_id in charge_award:
        gift_conf = charge_award_copy[gift_id]
        start_time = gift_conf.get("start_time")
        end_time = gift_conf.get("end_time", "2111-11-11 11:11:11")
        now_str = utils.datetime_toString(datetime.datetime.now())
        # 未开放或已过期的礼包
        if now_str > end_time or now_str < start_time:
            charge_award_copy.pop(gift_id)
    if not charge_award_copy:
        return 11, {"msg": utils.get_msg("active", "not_open")}
    gift_list = []
    end_time = None
    for gift_id in charge_award_copy:
        end_time = charge_award_copy[gift_id]["end_time"]
        if gift_id in charge_award_info:
            has_charge_coin = charge_award_info[gift_id]["charge_coin"]
        else:
            has_charge_coin = 0
        diff_charge_coin = charge_award_copy[gift_id]["charge_coin"] - has_charge_coin
        need_charge_coin = max(0, diff_charge_coin)
        tmp_dic = {
            "need_charge_coin": need_charge_coin,
            "now_charge_coin": has_charge_coin,
            "award": charge_award_copy[gift_id]["award"],
            "desc": charge_award_copy[gift_id].get("desc", ""),
            "charge_coin": charge_award_copy[gift_id]["charge_coin"],
            "name": charge_award_copy[gift_id].get("name", ""),
        }
        gift_list.append(tmp_dic)
    gift_list = sorted(gift_list, key=lambda x: x["charge_coin"])
    now_gift_id = len(gift_list) - 1
    found = False
    for i in range(len(gift_list)):
        if not found and gift_list[i]["need_charge_coin"] > 0:
            now_gift_id = i
            found = True
        gift_list[i].pop("charge_coin")
    data = {"gift_list": gift_list, "gift_index": now_gift_id, "end_time": end_time}
    return 0, data
Esempio n. 15
0
    def get_consume_award(self, coin):
        try:
            #获取运营配置的消耗奖励
            consume_award_conf = copy.deepcopy(self.game_config.operat_config.get("consume_award"))
            if not consume_award_conf:
                return
            #获取消耗奖励的内容
            user_property_obj = UserProperty.get(self.uid)
            consume_award_info = user_property_obj.consume_award_info
            old_consume_award_info = copy.deepcopy(consume_award_info)
            #遍历查找奖励内容
            for gift_id in consume_award_conf:
                gift_conf = consume_award_conf[gift_id]
                start_time = gift_conf.get('start_time')
                end_time = gift_conf.get('end_time','2111-11-11 11:11:11')
                now_str = datetime_toString(datetime.datetime.now())
                #未开放或已过期的礼包
                if now_str > end_time or now_str < start_time:
                    continue
                if gift_id not in consume_award_info:
                    consume_award_info[gift_id] = {
                                              'consume_coin': coin,
                                              'has_got_cnt': 0,   # 已领取的次数
                    }
                else:
                    consume_award_info[gift_id]['consume_coin'] += coin

                #金额未达到
                if consume_award_info[gift_id]['consume_coin'] - gift_conf.get('consume_coin',0) < 0:
                    continue
                #满足条件,发奖励

                #已经领取过的礼包
                print('chenhaiou gift_id: ', gift_id)
                # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin']    
                for cnt in range(consume_award_info[gift_id]['consume_coin'] / gift_conf.get('consume_coin',0)):
                    consume_award_info[gift_id]['has_got_cnt'] += 1
                    if gift_conf.get('award', []):
                        msg =  gift_conf.get('name', '') + utils.get_msg('operat', 'consume_award', self).format(gift_conf.get('consume_coin',0))
                        for award_warp in gift_conf['award'].values():
                            award = utils.get_item_by_random_simple(award_warp)
                            self.add_gift_by_dict(award, msg)
                consume_award_info[gift_id]['consume_coin'] %= gift_conf.get('consume_coin',0)
            if old_consume_award_info != consume_award_info:
                user_property_obj.put()
        except:
            print traceback.format_exc()
Esempio n. 16
0
def is_open_safty():
    """
    保底求将开关
    输入 无
    输出 保底开关是否开启
    """
    #获取抽将保底开关配置
    gacha_black_conf = game_config.gacha_config.get('gacha_black_conf', {})
    if not gacha_black_conf:
        return False
    #获取时间区间段
    start_time = gacha_black_conf.get('start_time')
    end_time = gacha_black_conf.get('end_time', '2111-11-11 11:11:11')
    now_str = datetime_toString(datetime.datetime.now())
    #开放
    if start_time <= now_str <= end_time:
        #在区间段内 返回开标志
        return True
    return False
Esempio n. 17
0
def is_open_safty():
    """
    保底求将开关
    输入 无
    输出 保底开关是否开启
    """
    #获取抽将保底开关配置
    gacha_black_conf = game_config.gacha_config.get('gacha_black_conf', {})
    if not gacha_black_conf:
        return False
    #获取时间区间段
    start_time = gacha_black_conf.get('start_time')
    end_time = gacha_black_conf.get('end_time','2111-11-11 11:11:11')
    now_str = datetime_toString(datetime.datetime.now())
    #开放
    if start_time <= now_str <= end_time:
        #在区间段内 返回开标志
        return True
    return False
Esempio n. 18
0
def multiply_income(multiply_income_conf):
    """特定时间内功能 收益翻倍
    banquet 美味大餐体力收益翻倍;
    daily_dungeon  试炼副本掉落物品道具,铜钱,经验值等数量翻倍;
    pk  实时pvp胜利pt点收益翻倍;
    start_time", "end_time"  翻倍开始和结束时间,  "multiply" 翻的倍数


    Returns:
        multiply     收益翻倍翻的倍数
    """
    if not multiply_income_conf:
        return 1
    now_str = datetime_toString(datetime.datetime.now())
    # 未开放
    start_time = multiply_income_conf.get("start_time", 0)
    end_time = multiply_income_conf.get("end_time", 0)
    if now_str > end_time or now_str < start_time:
        return 1
    return multiply_income_conf.get("multiply", 1)
Esempio n. 19
0
def multiply_income(multiply_income_conf):
    """特定时间内功能 收益翻倍
    banquet 美味大餐体力收益翻倍;
    daily_dungeon  试炼副本掉落物品道具,铜钱,经验值等数量翻倍;
    pk  实时pvp胜利pt点收益翻倍;
    start_time", "end_time"  翻倍开始和结束时间,  "multiply" 翻的倍数


    Returns:
        multiply     收益翻倍翻的倍数
    """
    if not multiply_income_conf:
        return 1
    now_str = datetime_toString(datetime.datetime.now())
    # 未开放
    start_time = multiply_income_conf.get("start_time", 0)
    end_time = multiply_income_conf.get("end_time", 0)
    if now_str > end_time or now_str < start_time:
        return 1
    return multiply_income_conf.get("multiply", 1)
Esempio n. 20
0
def __give_charge_award(rk_user, coin):
    """运营活动)充值奖励
    """
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and 'charge_award' in game_config.android_config:
        charge_award = rk_user.game_config.android_config['charge_award']
    else:
        charge_award = rk_user.game_config.operat_config.get('charge_award',{})
    if not charge_award:
        return
    charge_award_info = rk_user.user_property.charge_award_info

    for gift_id in charge_award:
        gift_conf = charge_award[gift_id]
        start_time = gift_conf.get('start_time')
        end_time = gift_conf.get('end_time','2111-11-11 11:11:11')
        now_str = datetime_toString(datetime.datetime.now())
        # 未开放或已过期的礼包
        if now_str > end_time or now_str < start_time:
            continue
        
        if gift_id not in charge_award_info:
            charge_award_info[gift_id] = {'charge_coin': coin}
        else:
            # 已经领取过的礼包
            if charge_award_info[gift_id].get('has_got', False):
                continue
            charge_award_info[gift_id]['charge_coin'] += coin
        # 金额未达到
        if charge_award_info[gift_id]['charge_coin'] < gift_conf.get('charge_coin',0):
            continue
        # 满足条件,发奖励
        charge_award_info[gift_id]['has_got'] = True
        msg = get_msg('charge', 'charge_award') % gift_conf.get('charge_coin',0)
        sid = 'system_%s' % (utils.create_gen_id())
        mail_title = msg
        mail_content = gift_conf.get('desc', '')
        user_mail_obj = UserMail.hget(rk_user.uid, sid)
        user_mail_obj.set_mail(mailtype='system', title=mail_title, content=mail_content, award=gift_conf['award'])

    rk_user.user_property.put()
Esempio n. 21
0
def receive(rk_user, params):
    '''
    领取邮件中的内容
    '''
    mails_id = str(params['mails_id'])
    all_info = UserMail.hgetall(rk_user.uid)
    return_info = {}
    for m in all_info:
        mid = all_info[m]['mail_info']['mid']
        if mid == mails_id:
            can_get = all_info[m]['mail_info'].get('can_get', False)
            if can_get is False:
                break
            awards = all_info[m]['mail_info']['awards']
            where = 'mail_' + all_info[m]['mail_info']['title']
            return_info = tools.add_things(rk_user, [{"_id": goods, "num": awards[goods]} for goods in awards if goods], where)

            umobj = UserMail.hget(rk_user.uid, m)
            umobj.mail_info['can_get'] = False
            umobj.mail_info['open_time'] = utils.datetime_toString(datetime.datetime.now())
            umobj.hput()
            break

    return 0, {'receive': return_info}
Esempio n. 22
0
def get_config(rk_user, params):
    config_info = {}

    subarea_notice_config = game_config.get_game_config(
        'subarea_notice_config', '1')

    this_subarea_notice = ''
    this_subarea_timed_notice_conf = {}
    for nc in subarea_notice_config:
        if game_config.subarea_num in nc['subarea_list']:
            this_subarea_notice = nc['notice']
            this_subarea_timed_notice_conf = nc['timed_notice_conf']
            break

    # 一些系统配置
    config_info['common'] = {
        'stamina_recover_time':
        game_config.system_config['stamina_recover_time'],
        'revive_coin':
        game_config.system_config['revive_coin'],
        'dungeon_clear_coin':
        game_config.system_config['dungeon_clear_coin'],
        'coin_recover_stamina':
        game_config.system_config['coin_recover_stamina'],
        'recover_stamina_need':
        game_config.system_config['recover_stamina_need'],
        'recover_normal_copy_need':
        game_config.system_config['recover_normal_copy_need'],
        'recover_daily_copy_need':
        game_config.system_config['recover_daily_copy_need'],
        'gacha_cost_coin':
        game_config.gacha_config['cost_coin'],
        'agreement':
        game_config.system_config.get('agreement', ''),
        'help_links':
        game_config.system_config.get('help_links', []),
        'aboutus':
        game_config.system_config['aboutus'],
        'praise':
        utils.get_msg('login', 'praise'),
        'weixin_voice_fg':
        game_config.weibo_config.get('weixin_voice_fg', False),
        'app_url':
        game_config.system_config['app_url'],
        'bbs_url':
        game_config.system_config.get('bbs_url', ''),
        # 'special_bg':game_config.system_config.get('special_bg',''),
        'card_update_conf':
        game_config.card_update_config,
        # #商店充值活动
        # "charge_url": game_config.shop_config.get("charge_award", {}).get("charge_url", ''),
        # # 微信分享类型1:到个人,2:朋友圈
        # "weixin_share_type": game_config.weibo_config.get('weixin_share_type', 1),
        # 'notice': game_config.system_config['notice'],
        'notice':
        this_subarea_notice,
        'multi_gacha_cnt':
        game_config.gacha_config.get('multi_gacha_cnt', 0),  #连抽次数
        'gift_code_fg':
        game_config.gift_config.get('is_open', False),
        'invite_fg':
        game_config.invite_config.get('open_invite', False),
        'app_comment_url':
        game_config.system_config.get('app_comment_url', ''),
        # 'contact_us': game_config.system_config.get('contact_us',''),
        # 'free_gacha_notice':game_config.system_config.get('free_gacha_notice',''),

        # 'weixin_fg': game_config.weibo_config.get('weixin_fg',False),

        # 'auto_fight_is_open':game_config.system_config.get('auto_fight_is_open', False),#自动战斗总开关
        'monthCard_is_open':
        game_config.system_config.get('monthCard_is_open', False),  #月卡开关
        # 'stamina_conf': game_config.operat_config.get('stamina_conf', {}),#领取体力配置
        # 'stamina_award_is_open':game_config.operat_config.get('stamina_award_is_open',False),#领取体力配置开关
        'open_special_is_open':
        game_config.dungeon_world_config.get('open_special_is_open',
                                             False),  #花费元宝开启loopgap战场开关
        # 'mycard_is_open':game_config.shop_config.get('mycard_is_open', False),#mycard 开关
        # 'mystery_store_is_open':game_config.mystery_store_config.get('mystery_store_is_open', True),# 神秘商店开关
        'mystery_store_refresh_coin':
        game_config.mystery_store_config.get('store_refresh_cost',
                                             True),  # 神秘商店刷新所需元宝
        'pvp_server_close':
        game_config.system_config.get('pvp_server_close', True),  # pvp开关
    }

    version = float(params['version'])

    # config_info['gacha_card_up'] = game_config.gacha_config.get('gacha_card_up',[])

    #安卓配置兼容
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE:
        if 'notice' in game_config.android_config:
            config_info['common']['notice'] = game_config.android_config[
                'notice']
        if 'agreement' in game_config.android_config:
            config_info['common']['agreement'] = game_config.android_config[
                'agreement']
        if 'gacha_notice' in game_config.android_config:
            config_info['common']['gacha_notice'] = game_config.android_config[
                'gacha_notice']
        if 'open_invite' in game_config.android_config:
            config_info['common']['invite_fg'] = game_config.android_config[
                'open_invite']
        if 'is_open' in game_config.android_config:
            config_info['common']['gift_code_fg'] = game_config.android_config[
                'is_open']
        if 'gacha_card_up' in game_config.android_config:
            config_info['gacha_card_up'] = game_config.android_config[
                'gacha_card_up']
        # if 'free_gacha_notice' in game_config.android_config:
        #     config_info['common']['free_gacha_notice'] = game_config.android_config['free_gacha_notice']
        # if 'auto_fight_is_open' in game_config.android_config:
        #     config_info['common']['auto_fight_is_open'] = game_config.android_config['auto_fight_is_open']
    #ios审核特殊处理
    if rk_user.client_type not in settings.ANDROID_CLIENT_TYPE and \
        version>float(game_config.system_config['version']) and \
        game_config.system_config.get('in_review',False):
        config_info['common']['invite_fg'] = False
        config_info['common']['gift_code_fg'] = False
        config_info['common']['gacha_notice'] = game_config.system_config.get(
            'gacha_notice_in_review', '')
        config_info['common']['notice'] = game_config.system_config.get(
            'notice_in_review', '')
        # config_info['common']['free_gacha_notice'] = game_config.system_config.get('free_gacha_notice_in_review','')
        # config_info['common']['auto_fight_is_open'] = False
        # config_info['common']['stamina_award_is_open'] = False
        config_info['common']['open_special_is_open'] = False
        config_info['common']['monthCard_is_open'] = False
        config_info['common']['mystery_store_is_open'] = False
        if 'gacha_card_up_in_review' in game_config.gacha_config:
            config_info['gacha_card_up'] = game_config.gacha_config[
                'gacha_card_up_in_review']
    else:
        #定时公告
        if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and 'timing_notice_conf' in game_config.android_config:
            timing_notice_conf = game_config.android_config.get(
                'timing_notice_conf', {})
        else:
            #timing_notice_conf = game_config.system_config.get('timing_notice_conf',{})
            timing_notice_conf = this_subarea_timed_notice_conf
        now_str = utils.datetime_toString(datetime.datetime.now())
        for notice_type in ['notice', 'gacha_notice']:
            if notice_type not in timing_notice_conf:
                continue
            notice_conf = timing_notice_conf[notice_type]
            for k in notice_conf:
                if now_str > k[0] and now_str < k[1]:
                    config_info['common'][notice_type] = notice_conf[k]
                    break

    #武将等级配置
    config_info['card_level'] = game_config.card_level_config
    #好友送礼配置
    config_info['friend_gift_conf'] = game_config.invite_config[
        'friend_gift_conf']
    #战场配置
    rc, config_info['dungeon'] = get_dungeon_config(rk_user, params)
    config_info['dungeon_world'] = game_config.dungeon_world_config['world']

    # # mycard 商品配置
    # config_info['mycard_sale'] = game_config.shop_config.get('mycard_sale', {})

    # sale 元宝商品配置   要减去已经特惠次数
    sale_conf = copy.deepcopy(game_config.shop_config.get('sale', {}))
    each_item_bought_times = rk_user.user_property.property_info[
        'charge_item_bought_times']
    for item in each_item_bought_times:
        if item in sale_conf:
            sale_conf[item]['extreme_cheap_time'] = max(
                sale_conf[item]['extreme_cheap_time'] -
                each_item_bought_times[item], 0)
    config_info['sale_conf'] = sale_conf

    # 月卡商品配置  要添加是否购买此月卡 和  剩余返还天数
    if config_info['common']['monthCard_is_open']:
        monthCard_sale_conf = copy.deepcopy(
            game_config.shop_config.get('monthCard', {}))
        monthCard_remain_days = rk_user.user_property.property_info.get(
            'monthCard_remain_days', {})
        for item in monthCard_sale_conf:
            if item in monthCard_remain_days:
                monthCard_sale_conf[item][
                    'remain_days'] = monthCard_remain_days[item]
                monthCard_sale_conf[item]['has_bought'] = True
            else:
                monthCard_sale_conf[item]['remain_days'] = 29
                monthCard_sale_conf[item]['has_bought'] = False
    else:
        monthCard_sale_conf = {}
    config_info['monthCard_sale_conf'] = monthCard_sale_conf

    config_info['vip_gift_sale'] = vip.vip_gift_sale_list(rk_user)

    #指定floor里面的内容信息
    config_info['all_floor_info'] = UserDungeon.get_instance(
        rk_user.uid).get_all_floor_info()

    config_info['common']['exp_gold_rate'] = game_config.card_update_config[
        'exp_gold_rate']
    #战斗参数配置
    config_info['fight_params_conf'] = {
        'hc_drop_rate':
        game_config.skill_params_config.get('hc_drop_rate', 0.1),
        'bc_drop_rate':
        game_config.skill_params_config.get('bc_drop_rate', 0.1),
    }

    # 探索展示物品配置
    # config_info['explore_show'] = {}
    # explore_show_can_get = game_config.explore_config.get('show_can_get', {})
    # for explore_type, goods_info in explore_show_can_get.items():
    #     config_info['explore_show'][explore_type] = [tools.pack_good(goods_id, num) for goods_id, num in goods_info.items()]
    # 珠子掉落配置
    # config_info['bead_config'] = game_config.bead_config

    # 各功能开放的等级
    config_info["open_lv"] = game_config.user_init_config['open_lv']
    # VIP玩家每天福利
    config_info['vip_daily_bonus'] = game_config.loginbonus_config[
        'vip_daily_bonus']
    # 道具商店   在道具商店配置中多添加字段 玩家当前已购买次数
    user_pack_obj = rk_user.user_pack
    props_sale = copy.deepcopy(
        game_config.props_store_config.get('props_sale', {}))
    for index, sale_conf in props_sale.items():
        sale_conf['now_buy_cnt'] = user_pack_obj.store_has_bought.get(index, 0)
    config_info['props_sale'] = props_sale
    return config_info
Esempio n. 23
0
def _is_between_times(mail):
    if len(mail['start_time']) == len(mail['end_time']) == 19:
        now = utils.datetime_toString(datetime.datetime.now())
        if mail['start_time'] <= now <= mail['end_time']:
            return True
    return False
Esempio n. 24
0
    def login(self, params):
        """登录
        发送登录奖励邮件
        """
        user_base_obj = self.user_base
        user_property_obj = self.user_property
        # game_config = self.game_config
        # 获取当天的字符串
        now = datetime.datetime.now()
        # 获取注册时间
        add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date()
        # 获取双倍充值的时间
        # charge_double_date = game_config.shop_config.get('charge_double_date', '')
        mail_awards = {}
        
        now_str = utils.datetime_toString(now)
        self.login_info.setdefault('login_record_new', []).insert(0, now_str)
        if len(self.login_info['login_record_new']) > 5:
                self.login_info['login_record_new'].pop()
        last_login_time = self.login_info['login_time']
        # 新安装用户,或玩家每天首次登入
        if not last_login_time or now.date() != utils.timestamp_toDatetime(last_login_time).date():
            self.login_info['total_login_num'] += 1
            self.login_info['login_record'].insert(0, str(now.date()))
            # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug
            if len(self.login_info['login_record']) > 40:
                self.login_info['login_record'].pop()
            # 连续登录
            if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date():
                self.login_info['continuous_login_num'] += 1
            # 非连续登录
            else:
                self.login_info['continuous_login_num'] = 1
            
            # 每日登录奖励
            # mail_awards.update(self.get_daily_login_award())

            # # 判断有无系统奖励
            # mail_awards.update(self.get_system_bonus())

            #临时的一个系统补偿
            mail_awards.update(self.get_system_compensates())
            
            # #临时补偿
            # mail_awards.update(self.get_temp_bonus())

            # # 特定日期首次充值双倍再开放
            # if not user_property_obj.double_charge and (
            # str(add_date) != str(now.date()) and
            # str(now.date()) == charge_double_date):
            #     user_property_obj.property_info['double_charge'] = True

            # # 特定日期之后已充值过的用户首次充值双倍关闭
            # if user_property_obj.double_charge and charge_double_date and (
            # str(now.date()) > charge_double_date):
            #     user_property_obj.property_info['double_charge'] = False
            
            user_gift_obj = UserGift.get_instance(self.uid)

            # #连续登录奖励
            # mail_awards.update(self.get_continuous_login_award())

            # #累积登录奖励
            # mail_awards.update(self.get_login_award())

            # 领取以前未领取的等级奖励
            user_gift_obj.get_lv_gift()

            # 月卡返还
            mail_awards.update(self.get_monthCard_bonus())
            # if str(add_date) != str(now.date()):
            #     self.__refresh_month_card_info(user_property_obj)

            # 重置道具商店购买次数
            self.user_pack.reset_store_has_bought_cnt()

            # vip 玩家 每日奖励  通过邮件发放
            mail_awards.update(self.get_vip_daily_bonus())

            # 回复战场次数重置
            user_property_obj.reset_recover_times()


        # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导
        if user_property_obj.property_info.get('newbie_steps', 0) == 15 and user_property_obj.newbie:
            user_property_obj.user_cards.reset_cards()

        rtn_data = {}

        user_property_obj.property_info['login_time'] = int(time.time())

        #版本更新奖励
        strVersion = params.get("version", "")
        if last_login_time and strVersion != "":
            update_version_award = self.get_update_version_bonus(strVersion)
            if update_version_award and strVersion not in user_property_obj.update_award:
                mail_awards["update_version_award"] = {"award":update_version_award}
                #user_property_obj.give_award(update_version_award)
                user_property_obj.property_info["update_award"].append(strVersion)
        #判断有无绑定奖励
        if UserBase.get(self.uid).platform != 'oc' and \
        user_property_obj.property_info.get('bind_award'):
            mail_awards['bind_award'] = self.game_config.weibo_config['bind_award']
            user_property_obj.property_info['bind_award'] = False
        
        # if not user_property_obj.newbie:
        #     rtn_data = self.new_login_bonus(now, user_property_obj)

        # 根据上一次22:00的pvp排名给予相应的功勋奖励
        mail_awards.update(self.get_honor_award())
        # 发得奖邮件
        self.send_mails(mail_awards)
        
        #当天注册用户判断是否有活动双倍
        # if not self.login_info.get('set_newbie_double_charge',False) and\
        #  not user_property_obj.double_charge and\
        #  str(now.date()) == charge_double_date and\
        #  str(add_date) == str(now.date()):
        #     user_property_obj.property_info['double_charge'] = True
        #     self.login_info['set_newbie_double_charge'] = True

        #  若保底求将没开  清空保底求将元宝
        from apps.logics.gacha import is_open_safty
        self.user_gacha.reset_cost_coin()
        if not is_open_safty():
            self.user_gacha.reset_cost_coin()

        # 登录时间更新
        self.login_info['login_time'] = int(time.time())

        self.put()
        user_property_obj.put()
        
        return {}
Esempio n. 25
0
    def login(self, params):
        """登录
        发送登录奖励邮件
        """
        user_base_obj = self.user_base
        user_property_obj = self.user_property
        # game_config = self.game_config
        # 获取当天的字符串
        now = datetime.datetime.now()
        # 获取注册时间
        add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date()
        # 获取双倍充值的时间
        # charge_double_date = game_config.shop_config.get('charge_double_date', '')
        mail_awards = {}

        now_str = utils.datetime_toString(now)
        self.login_info.setdefault('login_record_new', []).insert(0, now_str)
        if len(self.login_info['login_record_new']) > 5:
            self.login_info['login_record_new'].pop()
        last_login_time = self.login_info['login_time']
        # 新安装用户,或玩家每天首次登入
        if not last_login_time or now.date() != utils.timestamp_toDatetime(
                last_login_time).date():
            self.login_info['total_login_num'] += 1
            self.login_info['login_record'].insert(0, str(now.date()))
            # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug
            if len(self.login_info['login_record']) > 40:
                self.login_info['login_record'].pop()
            # 连续登录
            if now.date() == (utils.timestamp_toDatetime(last_login_time) +
                              datetime.timedelta(days=1)).date():
                self.login_info['continuous_login_num'] += 1
            # 非连续登录
            else:
                self.login_info['continuous_login_num'] = 1

            # 每日登录奖励
            # mail_awards.update(self.get_daily_login_award())

            # # 判断有无系统奖励
            # mail_awards.update(self.get_system_bonus())

            #临时的一个系统补偿
            mail_awards.update(self.get_system_compensates())

            # #临时补偿
            # mail_awards.update(self.get_temp_bonus())

            # # 特定日期首次充值双倍再开放
            # if not user_property_obj.double_charge and (
            # str(add_date) != str(now.date()) and
            # str(now.date()) == charge_double_date):
            #     user_property_obj.property_info['double_charge'] = True

            # # 特定日期之后已充值过的用户首次充值双倍关闭
            # if user_property_obj.double_charge and charge_double_date and (
            # str(now.date()) > charge_double_date):
            #     user_property_obj.property_info['double_charge'] = False

            user_gift_obj = UserGift.get_instance(self.uid)

            # #连续登录奖励
            # mail_awards.update(self.get_continuous_login_award())

            # #累积登录奖励
            # mail_awards.update(self.get_login_award())

            # 领取以前未领取的等级奖励
            user_gift_obj.get_lv_gift()

            # 月卡返还
            mail_awards.update(self.get_monthCard_bonus())
            # if str(add_date) != str(now.date()):
            #     self.__refresh_month_card_info(user_property_obj)

            # 重置道具商店购买次数
            self.user_pack.reset_store_has_bought_cnt()

            # vip 玩家 每日奖励  通过邮件发放
            mail_awards.update(self.get_vip_daily_bonus())

            # 回复战场次数重置
            user_property_obj.reset_recover_times()

        # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导
        if user_property_obj.property_info.get(
                'newbie_steps', 0) == 15 and user_property_obj.newbie:
            user_property_obj.user_cards.reset_cards()

        rtn_data = {}

        user_property_obj.property_info['login_time'] = int(time.time())

        #版本更新奖励
        strVersion = params.get("version", "")
        if last_login_time and strVersion != "":
            update_version_award = self.get_update_version_bonus(strVersion)
            if update_version_award and strVersion not in user_property_obj.update_award:
                mail_awards["update_version_award"] = {
                    "award": update_version_award
                }
                #user_property_obj.give_award(update_version_award)
                user_property_obj.property_info["update_award"].append(
                    strVersion)
        #判断有无绑定奖励
        if UserBase.get(self.uid).platform != 'oc' and \
        user_property_obj.property_info.get('bind_award'):
            mail_awards['bind_award'] = self.game_config.weibo_config[
                'bind_award']
            user_property_obj.property_info['bind_award'] = False

        # if not user_property_obj.newbie:
        #     rtn_data = self.new_login_bonus(now, user_property_obj)

        # 根据上一次22:00的pvp排名给予相应的功勋奖励
        mail_awards.update(self.get_honor_award())
        # 发得奖邮件
        self.send_mails(mail_awards)

        #当天注册用户判断是否有活动双倍
        # if not self.login_info.get('set_newbie_double_charge',False) and\
        #  not user_property_obj.double_charge and\
        #  str(now.date()) == charge_double_date and\
        #  str(add_date) == str(now.date()):
        #     user_property_obj.property_info['double_charge'] = True
        #     self.login_info['set_newbie_double_charge'] = True

        #  若保底求将没开  清空保底求将元宝
        from apps.logics.gacha import is_open_safty
        self.user_gacha.reset_cost_coin()
        if not is_open_safty():
            self.user_gacha.reset_cost_coin()

        # 登录时间更新
        self.login_info['login_time'] = int(time.time())

        self.put()
        user_property_obj.put()

        return {}
Esempio n. 26
0
def get_config(rk_user, params):
    config_info = {}

    subarea_notice_config = game_config.get_game_config("subarea_notice_config", "1")

    this_subarea_notice = ""
    this_subarea_timed_notice_conf = {}
    for nc in subarea_notice_config:
        if game_config.subarea_num in nc["subarea_list"]:
            this_subarea_notice = nc["notice"]
            this_subarea_timed_notice_conf = nc["timed_notice_conf"]
            break

    # 一些系统配置
    config_info["common"] = {
        "stamina_recover_time": game_config.system_config["stamina_recover_time"],
        "revive_coin": game_config.system_config["revive_coin"],
        "dungeon_clear_coin": game_config.system_config["dungeon_clear_coin"],
        "coin_recover_stamina": game_config.system_config["coin_recover_stamina"],
        "recover_stamina_need": game_config.system_config["recover_stamina_need"],
        "recover_normal_copy_need": game_config.system_config["recover_normal_copy_need"],
        "recover_daily_copy_need": game_config.system_config["recover_daily_copy_need"],
        "gacha_cost_coin": game_config.gacha_config["cost_coin"],
        "agreement": game_config.system_config.get("agreement", ""),
        "help_links": game_config.system_config.get("help_links", []),
        "aboutus": game_config.system_config["aboutus"],
        "praise": utils.get_msg("login", "praise"),
        "weixin_voice_fg": game_config.weibo_config.get("weixin_voice_fg", False),
        "app_url": game_config.system_config["app_url"],
        "bbs_url": game_config.system_config.get("bbs_url", ""),
        # 'special_bg':game_config.system_config.get('special_bg',''),
        "card_update_conf": game_config.card_update_config,
        # #商店充值活动
        # "charge_url": game_config.shop_config.get("charge_award", {}).get("charge_url", ''),
        # # 微信分享类型1:到个人,2:朋友圈
        # "weixin_share_type": game_config.weibo_config.get('weixin_share_type', 1),
        # 'notice': game_config.system_config['notice'],
        "notice": this_subarea_notice,
        "multi_gacha_cnt": game_config.gacha_config.get("multi_gacha_cnt", 0),  # 连抽次数
        "gift_code_fg": game_config.gift_config.get("is_open", False),
        "invite_fg": game_config.invite_config.get("open_invite", False),
        "app_comment_url": game_config.system_config.get("app_comment_url", ""),
        # 'contact_us': game_config.system_config.get('contact_us',''),
        # 'free_gacha_notice':game_config.system_config.get('free_gacha_notice',''),
        # 'weixin_fg': game_config.weibo_config.get('weixin_fg',False),
        # 'auto_fight_is_open':game_config.system_config.get('auto_fight_is_open', False),#自动战斗总开关
        "monthCard_is_open": game_config.system_config.get("monthCard_is_open", False),  # 月卡开关
        # 'stamina_conf': game_config.operat_config.get('stamina_conf', {}),#领取体力配置
        # 'stamina_award_is_open':game_config.operat_config.get('stamina_award_is_open',False),#领取体力配置开关
        "open_special_is_open": game_config.dungeon_world_config.get(
            "open_special_is_open", False
        ),  # 花费元宝开启loopgap战场开关
        # 'mycard_is_open':game_config.shop_config.get('mycard_is_open', False),#mycard 开关
        # 'mystery_store_is_open':game_config.mystery_store_config.get('mystery_store_is_open', True),# 神秘商店开关
        "mystery_store_refresh_coin": game_config.mystery_store_config.get("store_refresh_cost", True),  # 神秘商店刷新所需元宝
        "pvp_server_close": game_config.system_config.get("pvp_server_close", True),  # pvp开关
    }

    version = float(params["version"])

    # config_info['gacha_card_up'] = game_config.gacha_config.get('gacha_card_up',[])

    # 安卓配置兼容
    if rk_user.client_type in settings.ANDROID_CLIENT_TYPE:
        if "notice" in game_config.android_config:
            config_info["common"]["notice"] = game_config.android_config["notice"]
        if "agreement" in game_config.android_config:
            config_info["common"]["agreement"] = game_config.android_config["agreement"]
        if "gacha_notice" in game_config.android_config:
            config_info["common"]["gacha_notice"] = game_config.android_config["gacha_notice"]
        if "open_invite" in game_config.android_config:
            config_info["common"]["invite_fg"] = game_config.android_config["open_invite"]
        if "is_open" in game_config.android_config:
            config_info["common"]["gift_code_fg"] = game_config.android_config["is_open"]
        if "gacha_card_up" in game_config.android_config:
            config_info["gacha_card_up"] = game_config.android_config["gacha_card_up"]
        # if 'free_gacha_notice' in game_config.android_config:
        #     config_info['common']['free_gacha_notice'] = game_config.android_config['free_gacha_notice']
        # if 'auto_fight_is_open' in game_config.android_config:
        #     config_info['common']['auto_fight_is_open'] = game_config.android_config['auto_fight_is_open']
    # ios审核特殊处理
    if (
        rk_user.client_type not in settings.ANDROID_CLIENT_TYPE
        and version > float(game_config.system_config["version"])
        and game_config.system_config.get("in_review", False)
    ):
        config_info["common"]["invite_fg"] = False
        config_info["common"]["gift_code_fg"] = False
        config_info["common"]["gacha_notice"] = game_config.system_config.get("gacha_notice_in_review", "")
        config_info["common"]["notice"] = game_config.system_config.get("notice_in_review", "")
        # config_info['common']['free_gacha_notice'] = game_config.system_config.get('free_gacha_notice_in_review','')
        # config_info['common']['auto_fight_is_open'] = False
        # config_info['common']['stamina_award_is_open'] = False
        config_info["common"]["open_special_is_open"] = False
        config_info["common"]["monthCard_is_open"] = False
        config_info["common"]["mystery_store_is_open"] = False
        if "gacha_card_up_in_review" in game_config.gacha_config:
            config_info["gacha_card_up"] = game_config.gacha_config["gacha_card_up_in_review"]
    else:
        # 定时公告
        if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and "timing_notice_conf" in game_config.android_config:
            timing_notice_conf = game_config.android_config.get("timing_notice_conf", {})
        else:
            # timing_notice_conf = game_config.system_config.get('timing_notice_conf',{})
            timing_notice_conf = this_subarea_timed_notice_conf
        now_str = utils.datetime_toString(datetime.datetime.now())
        for notice_type in ["notice", "gacha_notice"]:
            if notice_type not in timing_notice_conf:
                continue
            notice_conf = timing_notice_conf[notice_type]
            for k in notice_conf:
                if now_str > k[0] and now_str < k[1]:
                    config_info["common"][notice_type] = notice_conf[k]
                    break

    # 武将等级配置
    config_info["card_level"] = game_config.card_level_config
    # 好友送礼配置
    config_info["friend_gift_conf"] = game_config.invite_config["friend_gift_conf"]
    # 战场配置
    rc, config_info["dungeon"] = get_dungeon_config(rk_user, params)
    config_info["dungeon_world"] = game_config.dungeon_world_config["world"]

    # # mycard 商品配置
    # config_info['mycard_sale'] = game_config.shop_config.get('mycard_sale', {})

    # sale 元宝商品配置   要减去已经特惠次数
    sale_conf = copy.deepcopy(game_config.shop_config.get("sale", {}))
    each_item_bought_times = rk_user.user_property.property_info["charge_item_bought_times"]
    for item in each_item_bought_times:
        if item in sale_conf:
            sale_conf[item]["extreme_cheap_time"] = max(
                sale_conf[item]["extreme_cheap_time"] - each_item_bought_times[item], 0
            )
    config_info["sale_conf"] = sale_conf

    # 月卡商品配置  要添加是否购买此月卡 和  剩余返还天数
    if config_info["common"]["monthCard_is_open"]:
        monthCard_sale_conf = copy.deepcopy(game_config.shop_config.get("monthCard", {}))
        monthCard_remain_days = rk_user.user_property.property_info.get("monthCard_remain_days", {})
        for item in monthCard_sale_conf:
            if item in monthCard_remain_days:
                monthCard_sale_conf[item]["remain_days"] = monthCard_remain_days[item]
                monthCard_sale_conf[item]["has_bought"] = True
            else:
                monthCard_sale_conf[item]["remain_days"] = 29
                monthCard_sale_conf[item]["has_bought"] = False
    else:
        monthCard_sale_conf = {}
    config_info["monthCard_sale_conf"] = monthCard_sale_conf

    config_info["vip_gift_sale"] = vip.vip_gift_sale_list(rk_user)

    # 指定floor里面的内容信息
    config_info["all_floor_info"] = UserDungeon.get_instance(rk_user.uid).get_all_floor_info()

    config_info["common"]["exp_gold_rate"] = game_config.card_update_config["exp_gold_rate"]
    # 战斗参数配置
    config_info["fight_params_conf"] = {
        "hc_drop_rate": game_config.skill_params_config.get("hc_drop_rate", 0.1),
        "bc_drop_rate": game_config.skill_params_config.get("bc_drop_rate", 0.1),
    }

    # 探索展示物品配置
    # config_info['explore_show'] = {}
    # explore_show_can_get = game_config.explore_config.get('show_can_get', {})
    # for explore_type, goods_info in explore_show_can_get.items():
    #     config_info['explore_show'][explore_type] = [tools.pack_good(goods_id, num) for goods_id, num in goods_info.items()]
    # 珠子掉落配置
    # config_info['bead_config'] = game_config.bead_config

    # 各功能开放的等级
    config_info["open_lv"] = game_config.user_init_config["open_lv"]
    # VIP玩家每天福利
    config_info["vip_daily_bonus"] = game_config.loginbonus_config["vip_daily_bonus"]
    # 道具商店   在道具商店配置中多添加字段 玩家当前已购买次数
    user_pack_obj = rk_user.user_pack
    props_sale = copy.deepcopy(game_config.props_store_config.get("props_sale", {}))
    for index, sale_conf in props_sale.items():
        sale_conf["now_buy_cnt"] = user_pack_obj.store_has_bought.get(index, 0)
    config_info["props_sale"] = props_sale
    return config_info
Esempio n. 27
0
from apps.models.user_base import UserBase

from apps.models.charge_record import ChargeRecord
from apps.common.utils import datetime_toString
import datetime
oid='12999763169054705758.1301353301481849'
uid='2100220172'
item_id = 'com.nega.fenglinhuoshangl.coin03'
item_num = 760
item_price = 68
charge_way='googleplay'
rk_user = UserBase.get(uid)
before_coin = rk_user.user_property.coin
rk_user.user_property.property_info['coin'] += item_num
after_coin = rk_user.user_property.property_info['coin']
record_data = {
    "oid":oid,
    "platform":rk_user.platform,
    "lv":rk_user.user_property.lv,
    "price":item_price,
    "item_id":item_id,
    "item_num":item_num,
    "createtime":datetime_toString(datetime.datetime.now()),
    "before_coin":before_coin,
    "after_coin":after_coin,
    "client_type":rk_user.client_type,
    "charge_way":charge_way,
}
ChargeRecord.set_record(rk_user, record_data)
rk_user.user_property.do_put()
Esempio n. 28
0
def charge_api(user_base_obj, oid, item_id, platform='', res_dict={},
               request=None, charge_way='', more_msg={}, charge_money=None):
    """充值通用函数


    Args:
        oid:   订单号,唯一标示
        item_id:   虚拟产品ID
        user_base_obj:  UserBase对象
        platform:   平台  例如:  qq, 360 , sina
    """
    data = {
        'rc': 0,
        'result': '',
        'data': {
            'msg': get_msg('charge','success'),
        }
    }

    if ChargeRecord.find({'oid':oid}):
        data['result'] = u'fail_订单重复' 
        return data

    rk_user = user_base_obj
    user_property_obj = rk_user.user_property
    property_info = user_property_obj.property_info
            
    try:
        shop_config = game_config.shop_config
        sale_conf = shop_config['sale']
        monthCard_sale_conf = shop_config.get('monthCard', {})
        item_info = sale_conf.get(item_id) or monthCard_sale_conf.get(item_id)
        if not item_info:
            data['rc'] = 12
            data['result'] = u'fail_无此商品' 
            data['data']['msg'] = 'item_id not exist:  ' + item_id
            return data
            

        # all_sale_type = ['sale']
        # for sale_type in all_sale_type:
        #     sale_items.update(shop_config.get(sale_type, {}))

        
        # 检查金额是否对
        if charge_money and not settings.DEBUG and float(charge_money) != float(item_info['price']):
            data['rc'] = 12
            data['result'] = u"充值金额不正确:%f" % float(charge_money)
            data['data']['msg'] = get_msg('charge','charge_money_invalid')
            return data
        before_coin = user_property_obj.coin
        # 分为月卡购买和  普通元宝购买
        free_coin = 0
        if item_id in sale_conf:
            # 计算此次购买可以买到的sale_coin 和额外赠送的 free_coin
            this_item_has_bought_times = property_info["charge_item_bought_times"].get(item_id, 0)
            if this_item_has_bought_times < item_info['extreme_cheap_time']:
                free_coin = item_info['extreme_free_coin']
            else:
                free_coin = item_info['free_coin']
            all_get_coin = item_info['sale_coin'] + free_coin
            # 记录此商品已购买次数
            property_info['charge_item_bought_times'].setdefault(item_id, 0)
            property_info['charge_item_bought_times'][item_id] += 1

        else:
            monthCard_remain_days = property_info.get('monthCard_remain_days', {})
            monthCard_remain_days.setdefault(item_id, 0)
            monthCard_remain_days[item_id] += 29
            property_info['monthCard_remain_days'] = monthCard_remain_days
            all_get_coin = item_info['sale_coin']

        # 记录总充值金额和元宝数
        property_info["charge_coins"] += all_get_coin
        property_info["charge_money"] += item_info['price']
        # 加元宝
        user_property_obj.property_info["coin"] += all_get_coin

        after_coin = user_property_obj.coin

        #作记录
        record_data = {
                        'oid': oid,
                        'platform': rk_user.platform,
                        'lv': user_property_obj.lv,
                        'price': item_info['price'],
                        'item_id': item_id,
                        'sale_coin': item_info['sale_coin'],
                        'free_coin': free_coin,
                        'createtime': datetime_toString(datetime.datetime.now()),
                        'before_coin': before_coin,
                        'after_coin': after_coin,
                        'client_type':rk_user.client_type,
                        'charge_way': charge_way,
                      }
        if more_msg:
            record_data.update(more_msg)
        ChargeRecord.set_log(rk_user, record_data)

        data['result'] = 'success'
        # 判断是否首次充值,若是,给首充奖励
        if (property_info["charge_money"] - item_info['price']) <= 0:
            __give_first_charge_award(rk_user)

        # (运营活动)充值满多少原价元宝给奖励
        __give_charge_award(rk_user, item_info['sale_coin'])        
        # 月卡处理
        # if item_id in month_items:
        #     __record_month_item(rk_user, item_id, item_info)
        user_property_obj.property_info = property_info
        user_property_obj.put()
    except:
        print_err()
        send_exception_mail(request)
        #清空storage
        app.pier.clear()
        data['rc'] = 12
        data['result'] = 'fail_' + traceback.format_exc()
        data['data']['msg'] = get_msg('charge','invalid')
    return data