예제 #1
0
파일: pay.py 프로젝트: hw233/test-2
 def get_card_left_day(self, card_type, now):
     """获得月卡剩余天数
     Returns: int 天数
     """
     if card_type == self.TYPE_PAY_CARD:
         return max(0, utils.count_days_diff(now, self.card_deadline))
     elif card_type == self.TYPE_PAY_GREAT_CARD:
         return max(0, utils.count_days_diff(now, self.great_card_deadline))
     elif card_type == self.TYPE_PAY_CARD_WEEK:
         return max(0, utils.count_days_diff(now, self.week_card_deadline))
     elif card_type == self.TYPE_PAY_CARD_FOREVER:
         return max(0, utils.count_days_diff(now,
                                             self.forever_card_deadline))
     elif card_type == self.TYPE_PAY_CARD_SMALL_WEEK:
         return max(
             0, utils.count_days_diff(now, self.small_week_card_deadline))
     return False
예제 #2
0
파일: boss.py 프로젝트: hw233/test-2
def _is_boss_group_overdue(group_id, last_change_time, now):
    """boss阵容是否过期"""
    if group_id not in data_loader.UnionBossGroupBasicInfo_dict:
        return True
    duration = data_loader.UnionBossGroupBasicInfo_dict[group_id].duration
    if utils.count_days_diff(last_change_time,
                             now) >= duration and duration != 0:
        return True
    else:
        return False
예제 #3
0
파일: union.py 프로젝트: hw233/test-2
def _get_transfer_member_result(members_info, data, now):
    members_info = [member_info for member_info in members_info 
            if utils.count_days_diff(member_info['last_login_time'], now) <= 3]
    if len(members_info) == 0:
        return None
    
    vices_info = [member_info for member_info in members_info
            if member_info['position'] == UnionMemberInfo.POSITION_VICE]
    if len(vices_info) == 0:
        members_info.sort(key = lambda member_info: member_info['history_honor'], reverse = True)
        return members_info[0]
    else:
        vices_info.sort(key = lambda vice_info: vice_info['history_honor'], reverse = True)
        return vices_info[0]
예제 #4
0
파일: boss.py 프로젝트: hw233/test-2
def try_reset_unionboss(data, now):
    """尝试重置联盟boss"""
    union = data.union.get()
    if utils.count_days_diff(union.boss_last_update_time, now) < 3:
        return False

    bosses = data.union_boss_list.get_all()
    for boss in bosses:
        boss.reset()

    union.reset_boss(now)

    boss_id = union.get_attacking_unionboss()
    if boss_id != 0:
        first_boss = get_union_boss(data, boss_id)
        first_boss.set_activity()

    return True
예제 #5
0
    def allocate(self, now):
        """根据时间戳计算是第几个赛季,返回赛季编号和赛季开始时间
        Args:
            now[int]: 当前时间戳
        Returns:
            (index, start_time): (赛季编号,赛季开始时间戳)
        """
        self._agent = DataRedisAgent().redis.client
        beginning = self._agent.get("TIMEunionseason")  #第一个赛季开始的时间戳
        if beginning is None:
            #如果服务器还没有赛季信息,初始化第一个赛季开始的时间
            beginning = utils.get_start_second_of_week(now)
            self._agent.set("TIMEunionseason", beginning)
        else:
            beginning = int(beginning)

        duration = utils.count_days_diff(beginning, now)
        period = int(
            float(data_loader.UnionConfInfo_dict["battle_season_last_day"].
                  value))
        index = duration // period + 1
        start_time = beginning + (index - 1) * period * utils.SECONDS_OF_DAY
        return (index, start_time)
예제 #6
0
파일: union.py 프로젝트: hw233/test-2
def is_need_transfer_leader(data, leader_info, now):
    """是否需要转让盟主"""
    days = utils.count_days_diff(leader_info['last_login_time'], now)
    return days > 3
예제 #7
0
def update_across_day_info(data, now, force = False):
    """更新所有离线数据
    """
    #判断是否是隔天登录
    user = data.user.get()
    is_same_day = utils.is_same_day(now, user.last_login_time)
    logger.debug("Is same day:%r" % is_same_day)

    if not force and is_same_day:
        return True

    days_diff = utils.count_days_diff(user.last_login_time, now)

    #更新用户登录信息
    user.login(now)
    trainer = data.trainer.get()
    trainer.add_login_num(1)

    #更新资源
    resource = data.resource.get()
    resource.update_current_resource(now)
    if not is_same_day:
        resource.reset_daily_statistics(days_diff)

    #更新兵力
    for conscript_data in data.conscript_list:
        conscript = conscript_data.get()
        if not is_same_day:
            conscript.reset_daily_statistics()
        if not conscript_business.update_current_soldier(conscript, now):
            return False

    #更新英雄驻守经验
    for building_data in data.building_list:
        building = building_data.get(True)
        if (building.is_able_to_garrison() and
                not building.is_upgrade and
                building.has_working_hero()):
            heroes_id = building.get_working_hero()
            heroes = []
            for id in heroes_id:
                heroes.append(data.hero_list.get(id))

            if not building_business.calc_garrison_exp(data, building, heroes, now):
                return False

    #更新签到信息
    sign = data.sign.get()
    sign.try_reset(now)

    #更新地图信息
    if not is_same_day:
        map = data.map.get()
        map.reset_daily_statistics(now)

    #更新抽奖信息
    if not is_same_day:
        draw = data.draw.get()
        draw.try_reset_draw(now)
        draw.reset_daily_statistics()

    #更新充值信息(月卡)
    pay = data.pay.get()
    pay.refresh_card(now)

    #更新一些统计信息
    trainer = data.trainer.get()
    if not is_same_day:
        trainer.reset_daily_statistics()

    #重置日常任务
    if not is_same_day:
        pattern = 1
        if data_loader.OtherBasicInfo_dict.has_key("init_id"):
            pattern = int(float(data_loader.OtherBasicInfo_dict['init_id'].value))
        mission_business.reset_daily_missions(data, pattern)

    #更新任务状态
    mission_business.update_all_missions(data, now)

    #更新政令
    if not is_same_day:
        energy = data.energy.get()
        energy.reset_daily_use_energy()

    #更新史实城信息
    if not is_same_day:
        for legendcity in data.legendcity_list.get_all():
            legendcity.reset_attack_count_daily_auto()

    #更新试炼场信息
    if not is_same_day:
        anneal = data.anneal.get()
        anneal.try_forward_floor()
        anneal_business.refresh_attack_num(anneal, now)

    #更新换位演武场
    if not is_same_day:
        transfer = data.transfer.get()
        transfer.reset()

    if not is_same_day:
        plunder = data.plunder.get()
        plunder.reset()
        plunder_business.decay_all_plunder_enemy_daily(data)

    return True