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
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
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]
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
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)
def is_need_transfer_leader(data, leader_info, now): """是否需要转让盟主""" days = utils.count_days_diff(leader_info['last_login_time'], now) return days > 3
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