def send_rank_reward_and_reset_star(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) char_ids = [i for i in char_ids] condition = {'$and': [ {'_id': {'$in': char_ids}}, {'today_max_star': {'$ne': 0}} ]} docs = MongoTower.db(server_id).find(condition, {'_id': 1}).sort('today_max_star', -1) rank = 1 for doc in docs: cid = doc['_id'] config = ConfigTowerRankReward.get(rank) rc = ResourceClassification.classify(config.reward) m = MailManager(server_id, cid) m.add( config.mail_title, config.mail_content, attachment=rc.to_json(), ) rank += 1 # reset today max star MongoTower.db(server_id).update_many( {}, {'$set': { 'today_max_star': 0, }} )
def make_product(cls, server_id): def _make(doc): config = ConfigBaseStationLevel.get(doc['product_level']) items = config.get_product(100 - doc['loss_percent']) rc = ResourceClassification.classify(items) rc.add(server_id, doc['_id'], message="Plunder.make_product") MongoPlunder.db(server_id).update_one( {'_id': doc['_id']}, { '$set': { 'product_level': doc['level'], 'loss_percent': 0, # 'revenge_list': [], 'drop': rc.to_json(), } }) char_ids = Club.get_recent_login_char_ids(server_id) char_ids = [i for i in char_ids] docs = MongoPlunder.db(server_id).find({'_id': { '$in': char_ids }}, { 'level': 1, 'product_level': 1, 'loss_percent': 1 }) for d in docs: _make(d)
def make_product(cls, server_id): def _make(doc): config = ConfigBaseStationLevel.get(doc['product_level']) items = config.get_product(100 - doc['loss_percent']) rc = ResourceClassification.classify(items) rc.add(server_id, doc['_id'], message="Plunder.make_product") MongoPlunder.db(server_id).update_one( {'_id': doc['_id']}, {'$set': { 'product_level': doc['level'], 'loss_percent': 0, # 'revenge_list': [], 'drop': rc.to_json(), }} ) char_ids = Club.get_recent_login_char_ids(server_id) char_ids = [i for i in char_ids] docs = MongoPlunder.db(server_id).find( {'_id': {'$in': char_ids}}, {'level': 1, 'product_level': 1, 'loss_percent': 1} ) for d in docs: _make(d)
def auto_increase_product(cls, server_id): level_limit = GlobalConfig.value("TERRITORY_BUILDING_AUTO_INCREASE_LEVEL") level_condition = {'level': {'$gte': level_limit}} char_ids = Club.get_recent_login_char_ids(server_id, other_conditions=[level_condition]) char_ids = [i for i in char_ids] docs = MongoTerritory.db(server_id).find({'_id': {'$in': char_ids}}) for doc in docs: t = Territory(server_id, doc['_id'], doc) t.building_auto_increase_product()
def auto_increase_product(cls, server_id): level_limit = GlobalConfig.value( "TERRITORY_BUILDING_AUTO_INCREASE_LEVEL") level_condition = {'level': {'$gte': level_limit}} char_ids = Club.get_recent_login_char_ids( server_id, other_conditions=[level_condition]) char_ids = [i for i in char_ids] docs = MongoTerritory.db(server_id).find({'_id': {'$in': char_ids}}) for doc in docs: t = Territory(server_id, doc['_id'], doc) t.building_auto_increase_product()
def auto_add_plunder_times(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) char_ids = [i for i in char_ids] condition = {'$and': [ {'_id': {'$in': char_ids}}, {'plunder_remained_times': {'$lt': PLUNDER_TIMES_RECOVER_LIMIT}} ]} MongoPlunder.db(server_id).update_many( condition, {'$inc': {'plunder_remained_times': 1}} )
def send_rank_reward(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) # 加上一分钟,确保已经到了第二天 # 定时任务要是 23:59:59 启动,那天数判断就错了 weekday = arrow.utcnow().to( settings.TIME_ZONE).replace(minutes=1).weekday() for cid in char_ids: arena = Arena(server_id, cid) rank = arena.get_current_rank() # 每日奖励 config = ConfigArenaRankReward.get(rank) rc = ResourceClassification.classify(config.reward) m = MailManager(server_id, cid) m.add( config.mail_title, config.mail_content, attachment=rc.to_json(), ) if weekday == 0: # 周一发周奖励 config_weekly = ConfigArenaRankRewardWeekly.get(rank) rc = ResourceClassification.classify(config_weekly.reward) m = MailManager(server_id, cid) m.add(config_weekly.mail_title, config_weekly.mail_content, attachment=rc.to_json()) if weekday == 0: docs = MongoArena.db(server_id).find({'_id': { '$regex': '^\d+$' }}, {'_id': 1}) default_score_doc = MongoArenaScore.db(server_id).find_one( {'_id': ARENA_DEFAULT_SCORE}) for doc in docs: if doc['_id'] in default_score_doc['char_ids']: continue ArenaScore(server_id, int(doc['_id'])).set_score(ARENA_DEFAULT_SCORE)
def send_rank_reward(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) # 加上一分钟,确保已经到了第二天 # 定时任务要是 23:59:59 启动,那天数判断就错了 weekday = arrow.utcnow().to(settings.TIME_ZONE).replace(minutes=1).weekday() for cid in char_ids: arena = Arena(server_id, cid) rank = arena.get_current_rank() # 每日奖励 config = ConfigArenaRankReward.get(rank) rc = ResourceClassification.classify(config.reward) m = MailManager(server_id, cid) m.add( config.mail_title, config.mail_content, attachment=rc.to_json(), ) if weekday == 0: # 周一发周奖励 config_weekly = ConfigArenaRankRewardWeekly.get(rank) rc = ResourceClassification.classify(config_weekly.reward) m = MailManager(server_id, cid) m.add( config_weekly.mail_title, config_weekly.mail_content, attachment=rc.to_json() ) if weekday == 0: docs = MongoArena.db(server_id).find( {'_id': {'$regex': '^\d+$'}}, {'_id': 1} ) default_score_doc = MongoArenaScore.db(server_id).find_one({'_id': ARENA_DEFAULT_SCORE}) for doc in docs: if doc['_id'] in default_score_doc['char_ids']: continue ArenaScore(server_id, int(doc['_id'])).set_score(ARENA_DEFAULT_SCORE)
def auto_add_plunder_times(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) char_ids = [i for i in char_ids] condition = { '$and': [{ '_id': { '$in': char_ids } }, { 'plunder_remained_times': { '$lt': PLUNDER_TIMES_RECOVER_LIMIT } }] } MongoPlunder.db(server_id).update_many( condition, {'$inc': { 'plunder_remained_times': 1 }})
def generate(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) leaderboard_docs = [] for cid in char_ids: obj = Club(server_id, cid) leaderboard_docs.append({ '_id': cid, 'level': obj.level, 'power': obj.power, }) db = MongoClubLeaderboard.db(server_id) db.delete_many({}) if leaderboard_docs: try: db.insert_many(leaderboard_docs) except BulkWriteError as e: pprint.pprint(e) raise e
def generate(cls, server_id): char_ids = Club.get_recent_login_char_ids(server_id) leaderboard_docs = [] for cid in char_ids: obj = Club(server_id, cid) leaderboard_docs.append({ '_id': cid, 'level': obj.level, 'power': obj.power, }) db = MongoClubLeaderboard.db(server_id) db.delete_many({}) if leaderboard_docs: try: db.insert_many(leaderboard_docs) except BulkWriteError as e: pprint.pprint(e) raise e