def show_open_server_gift(rk_user, params): ''' 返回开服奖励的礼包 ''' ug = rk_user.user_gift ul = rk_user.user_login add_time = utils.timestamp_toDatetime(rk_user.add_time) now = datetime.datetime.now() today = utils.get_today_str() # 初始化 if not ug.open_server_record: # 'gifts'按领取天数记录奖励是否领取,比如登录过10天,但只领过一次,这时gifts记录的是['1']['has_got']=True ,其他为False # 因为每天只能领取一次,'date_info'用来按日期记录哪天是否已领过一次 ug.open_server_record = {'gifts': {}, 'date_info': {}} for day in range(1, 32): ug.open_server_record['gifts'].setdefault(str(day), {})['has_got'] = False ug.do_put() # 账号注册已达45天(包括注册当天),或者全部领取了,则清空全部开服礼包 if (now - add_time).days + 1 > 45 or ug.has_got_all_open_server_gifts(): ug.clear_open_server_gift() return 11, {'msg': utils.get_msg('gift','clear_open_server')} awards = game_config.loginbonus_config['open_server_gift'].get('awards', {}) data = {'gifts': {}} for days, award in awards.items(): data['gifts'].setdefault(days, {})['awards'] = award #data['gifts'][days]['has_got'] = ug.open_server_record.setdefault(days, {}).setdefault('has_got', False) data['gifts'][days]['has_got'] = ug.open_server_record['gifts'][days]['has_got'] # 给前端现实能否领取,不需存在model中 #data['gifts'][days]['can_get'] = True if ul.total_login_num >= int(days) else False if int(days) == _got_days(ug)+1 and not ug.open_server_record['date_info'].get(today, False): data['gifts'][days]['can_get'] = True else: data['gifts'][days]['can_get'] = False ug.do_put() return 0, data
def get_temp_bonus(self): """ 临时补偿,分安卓和ios """ data = {} now = datetime.datetime.now() temp_bonus_conf = self.game_config.loginbonus_config.get( 'temp_bonus', {}) title = temp_bonus_conf.get('title', '') # 当天注册不给予补偿 user_base_obj = self.user_base add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() if str(add_date) != str(now.date()): for k in temp_bonus_conf['awards']: if not isinstance(k, (list, tuple)): continue if len(k) == 2: date_start = k[0] date_end = k[1] today_time = str(now.date()) if today_time < date_start or today_time > date_end: continue #ios if not user_base_obj.client_type: award = temp_bonus_conf[k].get('ios', {}) else: award = temp_bonus_conf[k].get('android', {}) if award: data['temp_bonus'] = { 'content': temp_bonus_conf[k].pop('content'), 'award': award, 'title': title, } break return data
def get_temp_bonus(self): """ 临时补偿,分安卓和ios """ data = {} now = datetime.datetime.now() temp_bonus_conf = self.game_config.loginbonus_config.get('temp_bonus', {}) title = temp_bonus_conf.get('title', '') # 当天注册不给予补偿 user_base_obj = self.user_base add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() if str(add_date) != str(now.date()): for k in temp_bonus_conf['awards']: if not isinstance(k, (list, tuple)): continue if len(k) == 2: date_start = k[0] date_end = k[1] today_time = str(now.date()) if today_time < date_start or today_time > date_end: continue #ios if not user_base_obj.client_type: award = temp_bonus_conf[k].get('ios',{}) else: award = temp_bonus_conf[k].get('android',{}) if award: data['temp_bonus'] = { 'content':temp_bonus_conf[k].pop('content'), 'award':award, 'title': title, } break return data
def show_open_server_gift(rk_user, params): ''' 返回开服奖励的礼包 ''' ug = rk_user.user_gift ul = rk_user.user_login add_time = utils.timestamp_toDatetime(rk_user.add_time) now = datetime.datetime.now() today = utils.get_today_str() # 初始化 if not ug.open_server_record['gifts']: # 'gifts'按领取天数记录奖励是否领取,比如登录过10天,但只领过一次,这时gifts记录的是['1']['has_got']=True ,其他为False # 因为每天只能领取一次,'date_info'用来按日期记录哪天是否已领过一次 #ug.open_server_record = {'gifts': {}, 'date_info': {}} for day in range(1, 32): ug.open_server_record['gifts'].setdefault(str(day), {})['has_got'] = False ug.put() data = {'gifts': {}} # 账号注册已达45天(包括注册当天),或者全部领取了,则清空全部开服礼包 if (now - add_time).days + 1 > 45 or ug.has_got_all_open_server_gifts(): return 0, data awards = game_config.loginbonus_config['open_server_gift'].get('awards', {}) for days, award in awards.items(): data['gifts'].setdefault(days, {})['awards'] = award data['gifts'][days]['has_got'] = ug.open_server_record['gifts'][days]['has_got'] # 给前端现实能否领取,不需存在model中 if int(days) == ug.total_open_days+1 and not ug.open_server_record['date_info'].get(today, False): data['gifts'][days]['can_get'] = True else: data['gifts'][days]['can_get'] = False return 0, data
def get_system_compensates(self): data = {} now = datetime.datetime.now() system_compensates_conf = self.game_config.loginbonus_config.get( 'system_compensates', {}) title = system_compensates_conf.get('title', '') # 当天注册不给予补偿 add_date = utils.timestamp_toDatetime(self.user_base.add_time).date() if str(add_date) != str( now.date()) and system_compensates_conf.get('awards'): if str(now.date()) in system_compensates_conf['awards']: # 兼容旧配置 data['compensates'] = { 'content': system_compensates_conf[str(now.date())].get( 'content', ''), 'award': system_compensates_conf[str(now.date())], 'title': title, } else: #新配置支持区间奖励 for k in system_compensates_conf['awards']: if not isinstance(k, (list, tuple)): continue login_count = 0 # 累积登录天数 if len(k) == 2: date_start = k[0] date_end = k[1] today_time = str(now.date()) if today_time < date_start or today_time > date_end: continue # 计算活动区间累积登录天数 lg_record = self.login_info.get('login_record', []) login_count = len([ x for x in lg_record if date_start <= x <= date_end ]) if str(login_count) in system_compensates_conf[k]: data['compensates'] = { 'content': system_compensates_conf[k][str(login_count)].get( 'content', ''), 'award': system_compensates_conf[k][str(login_count)], 'title': title, } break return data
def refresh_info(self): """ 要刷新数据,过期数据清除 """ today = utils.get_today_str() if today != self.today: self.today = today gift_list = self.gift_list gift_list_copy = copy.deepcopy(gift_list) now = datetime.datetime.now() for _index in gift_list_copy: upd_time = gift_list[_index]['upd_time'] has_got = gift_list_copy[_index].get('has_got',0) #奖励已经领过,并且过期7天则删除 if has_got and now >= utils.timestamp_toDatetime(upd_time) + datetime.timedelta(days=7): gift_list.pop(_index) self.put()
def refresh_info(self): """ 要刷新数据,过期数据清除 """ today = utils.get_today_str() if today != self.today: self.today = today gift_list = self.gift_list gift_list_copy = copy.deepcopy(gift_list) now = datetime.datetime.now() for _index in gift_list_copy: upd_time = gift_list[_index]['upd_time'] has_got = gift_list_copy[_index].get('has_got', 0) #奖励已经领过,并且过期7天则删除 if has_got and now >= utils.timestamp_toDatetime( upd_time) + datetime.timedelta(days=7): gift_list.pop(_index) self.put()
def get_system_compensates(self): data = {} now = datetime.datetime.now() system_compensates_conf = self.game_config.loginbonus_config.get('system_compensates', {}) title = system_compensates_conf.get('title', '') # 当天注册不给予补偿 add_date = utils.timestamp_toDatetime(self.user_base.add_time).date() if str(add_date) != str(now.date()) and system_compensates_conf.get('awards'): if str(now.date()) in system_compensates_conf['awards']: # 兼容旧配置 data['compensates'] = { 'content':system_compensates_conf[str(now.date())].get('content', ''), 'award':system_compensates_conf[str(now.date())], 'title': title, } else:#新配置支持区间奖励 for k in system_compensates_conf['awards']: if not isinstance(k, (list, tuple)): continue login_count = 0 # 累积登录天数 if len(k) == 2: date_start = k[0] date_end = k[1] today_time = str(now.date()) if today_time < date_start or today_time > date_end: continue # 计算活动区间累积登录天数 lg_record = self.login_info.get('login_record',[]) login_count = len([x for x in lg_record if date_start <= x <= date_end]) if str(login_count) in system_compensates_conf[k]: data['compensates'] = { 'content':system_compensates_conf[k][str(login_count)].get('content', ''), 'award':system_compensates_conf[k][str(login_count)], 'title': title, } break return data
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 {}