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)
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()
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()
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}
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
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', )
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
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
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
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
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()
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()
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)
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
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()
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
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
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)
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()
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}
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
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
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 {}
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 {}
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
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()
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