Exemplo n.º 1
0
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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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()
Exemplo n.º 7
0
 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()
Exemplo n.º 8
0
    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
Exemplo n.º 9
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 {}
Exemplo n.º 10
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 {}