示例#1
0
    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,
            }}
        )
示例#2
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)
示例#3
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)
示例#4
0
    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()
示例#5
0
    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()
示例#6
0
    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}}
        )
示例#7
0
    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)
示例#8
0
文件: arena.py 项目: yueyoum/dianjing
    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)
示例#9
0
    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
            }})
示例#10
0
    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
示例#11
0
    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