示例#1
0
def generate_quest(quest):
    gettext.find('quest', 'locales', all=True)
    lang = gettext.translation('quest', localedir='locale', fallback=True)
    lang.install()

    quest_reward_type = questreward(quest['quest_reward_type'])
    quest_type = questtype(quest['quest_type'])
    if '{0}' in quest_type:
        quest_type = quest_type.replace('{0}', str(quest['quest_target']))

    item_id = 0
    item_amount = 1
    pokemon_id = '000'
    pokemon_name = ''
    item_type = ''
    pokemon_form = '00'
    pokemon_costume = '00'
    pokemon_asset_bundle = '00'

    if quest_reward_type == _('Item'):
        item_amount = quest['quest_item_amount']
        item_type = rewarditem(quest['quest_item_id'])
        item_id = quest['quest_item_id']
    elif quest_reward_type == _('Stardust'):
        item_amount = quest['quest_stardust']
        item_type = _('Stardust')
    elif quest_reward_type == _('Pokemon'):
        item_type = 'Pokemon'
        pokemon_name = i8ln(pokemonname(str(quest['quest_pokemon_id'])))
        pokemon_id = quest['quest_pokemon_id']
        pokemon_form = quest['quest_pokemon_form_id']
        pokemon_costume = quest['quest_pokemon_costume_id']
        if pokemon_form != '00':
            pokemon_asset_bundle = form_mapper(int(pokemon_id), pokemon_form)
    elif quest_reward_type == _('Energy'):
        item_type = _('Mega Energy')
        if quest['quest_pokemon_id'] and int(quest['quest_pokemon_id']) > 0:
            pokemon_name = i8ln(pokemonname(str(quest['quest_pokemon_id'])))
            pokemon_id = quest['quest_pokemon_id']
        else:
            pokemon_name = ''
        item_amount = quest['quest_item_amount']

    if not quest['task']:
        quest_task = questtask(quest['quest_type'], quest['quest_condition'],
                               quest['quest_target'], quest['quest_template'])
    else:
        quest_task = quest['task']

    quest_raw = ({
        'pokestop_id': quest['pokestop_id'],
        'name': quest['name'],
        'url': quest['image'],
        'latitude': quest['latitude'],
        'longitude': quest['longitude'],
        'timestamp': quest['quest_timestamp'],
        'item_id': item_id,
        'item_amount': item_amount,
        'item_type': item_type,
        'pokemon_id': pokemon_id,
        'pokemon_name': pokemon_name,
        'pokemon_form': pokemon_form,
        'pokemon_asset_bundle_id': pokemon_asset_bundle,
        'pokemon_costume': pokemon_costume,
        'quest_type': quest_type,
        'quest_type_raw': quest['quest_type'],
        'quest_reward_type': quest_reward_type,
        'quest_reward_type_raw': quest['quest_reward_type'],
        'quest_task': quest_task,
        'quest_target': quest['quest_target'],
        'quest_condition': quest['quest_condition'],
        'quest_template': quest['quest_template'],
    })
    return quest_raw
示例#2
0
文件: statistics.py 项目: Elfnoir/MAD
    def shiny_stats_data(self):
        # shiny hour

        shiny_hour_temp = {}
        shiny_hour_calc = {}
        shiny_hour = []
        data = self._db_stats_reader.get_shiny_stats_hour()
        for dat in data:
            if dat[1] not in shiny_hour_temp:
                shiny_hour_temp[dat[1]] = dat[0]

        for dat in shiny_hour_temp:
            if shiny_hour_temp[dat] not in shiny_hour_calc:
                shiny_hour_calc[shiny_hour_temp[dat]] = 0
            shiny_hour_calc[shiny_hour_temp[dat]] += 1

        for dat in sorted(shiny_hour_calc):
            sht = ([
                self.utc2local(dat * 60 * 60) * 1000, shiny_hour_calc[dat]
            ])
            shiny_hour.append(sht)

        shiny_stats = []
        shiny_worker = {}
        shiny_avg = {}
        data = self._db_stats_reader.get_shiny_stats()
        for dat in data:
            form_suffix = "%02d" % form_mapper(dat[2], dat[5])
            mon = "%03d" % dat[2]
            mon_img = self.generate_mon_icon_url(dat[2], dat[8], dat[9])
            mon_name = get_mon_name(dat[2])
            diff: int = dat[0]
            if diff == 0:
                logger.warning(
                    'No deeper pokemon stats are possible - not enough data (check config.ini // '
                    'game_stats_raw)')
                diff = 1

            ratio = round(dat[1] * 100 / diff, 2)
            if dat[3] not in shiny_worker:
                shiny_worker[dat[3]] = 0
            shiny_worker[dat[3]] += dat[1]

            if dat[2] not in shiny_avg:
                shiny_avg[dat[2]] = {}
            if dat[5] not in shiny_avg[dat[2]]:
                shiny_avg[dat[2]][dat[5]] = {}
                shiny_avg[dat[2]][dat[5]]['total_shiny'] = []
                shiny_avg[dat[2]][dat[5]]['total_nonshiny'] = []

            shiny_avg[dat[2]][dat[5]]['total_shiny'].append(dat[1])
            shiny_avg[dat[2]][dat[5]]['total_nonshiny'].append(diff)

            shiny_stats.append({
                'sum':
                dat[0],
                'shiny':
                dat[1],
                'img':
                mon_img,
                'name':
                mon_name,
                'ratio':
                ratio,
                'worker':
                dat[3],
                'encounterid':
                dat[4],
                'periode':
                datetime.datetime.fromtimestamp(dat[6]).strftime(
                    self._datetimeformat)
            })

        shiny_stats_avg = []
        for dat in shiny_avg:
            for form_dat in shiny_avg[dat]:
                form_suffix = "%02d" % form_mapper(dat, form_dat)
                mon = "%03d" % dat
                mon_img = 'asset/pokemon_icons/pokemon_icon_' + mon + '_' + form_suffix + '_shiny.png'
                mon_name = get_mon_name(dat)

                total_shiny_encounters = sum(
                    shiny_avg[dat][form_dat]['total_shiny'])
                total_nonshiny_encounters = sum(
                    shiny_avg[dat][form_dat]['total_nonshiny'])
                shiny_avg_click = round(
                    total_nonshiny_encounters / total_shiny_encounters, 0)

                shiny_stats_avg.append({
                    'name': mon_name,
                    'img': mon_img,
                    'total_shiny_encounters': total_shiny_encounters,
                    'total_nonshiny_encounters': total_nonshiny_encounters,
                    'click_for_shiny': shiny_avg_click
                })

        shiny_stats_worker = []
        for dat in shiny_worker:
            shiny_stats_worker.append({
                'sum': shiny_worker[dat],
                'worker': dat
            })

        stats = {
            'shiny': shiny_stats,
            'shiny_worker': shiny_stats_worker,
            'shiny_hour': shiny_hour,
            'shiny_stats_avg': shiny_stats_avg
        }
        return jsonify(stats)
示例#3
0
文件: statistics.py 项目: Elfnoir/MAD
    def game_stats_shiny_v2(self):
        logger.debug2('game_stats_shiny_v2')
        timestamp_from = request.args.get('from', None)
        if (timestamp_from):
            timestamp_from = self.local2utc(int(timestamp_from))
            logger.debug2('using timestamp_from: {}', timestamp_from)

        timestamp_to = request.args.get('to', None)
        if (timestamp_to):
            timestamp_to = self.local2utc(int(timestamp_to))
            logger.debug2('using timestamp_to: {}', timestamp_to)

        tmp_perworker_v2 = {}
        data = self._db_stats_reader.get_shiny_stats_v2(
            timestamp_from, timestamp_to)
        found_shiny_mon_id = []
        shiny_count = {}
        mon_names = {}
        tmp_perhour_v2 = {}

        if data is None or len(data) == 0:
            return jsonify({'empty': True})

        shiny_stats_v2 = []
        for dat in data:
            form_suffix = "%02d" % form_mapper(dat[0], dat[1])
            mon = "%03d" % dat[0]
            mon_img = 'asset/pokemon_icons/pokemon_icon_' + mon + '_' + form_suffix + '_shiny.png'
            mon_name = get_mon_name(dat[0])
            mon_names[dat[0]] = mon_name
            found_shiny_mon_id.append(
                mon
            )  # append everything now, we will set() it later to remove duplicates
            if dat[8] not in tmp_perworker_v2:
                tmp_perworker_v2[dat[8]] = 0
            tmp_perworker_v2[dat[8]] += 1

            if dat[0] not in shiny_count:
                shiny_count[dat[0]] = {}
            if dat[1] not in shiny_count[dat[0]]:
                shiny_count[dat[0]][dat[1]] = 0
            shiny_count[dat[0]][dat[1]] += 1

            # there is later strftime which converts to local time too, can't use utc2local - it will do double shift
            timestamp = datetime.datetime.fromtimestamp(dat[7])

            if timestamp.hour in tmp_perhour_v2:
                tmp_perhour_v2[timestamp.hour] += 1
            else:
                tmp_perhour_v2[timestamp.hour] = 1

            shiny_stats_v2.append({
                'img':
                mon_img,
                'name':
                mon_name,
                'worker':
                dat[8],
                'lat':
                dat[2],
                'lat_5':
                "{:.5f}".format(dat[2]),
                'lng_5':
                "{:.5f}".format(dat[3]),
                'lng':
                dat[3],
                'timestamp':
                timestamp.strftime(self._datetimeformat),
                'form':
                dat[1],
                'mon_id':
                dat[0],
                'encounter_id':
                str(dat[9])
            })

        global_shiny_stats_v2 = []
        data = self._db_stats_reader.get_shiny_stats_global_v2(
            set(found_shiny_mon_id), timestamp_from, timestamp_to)
        for dat in data:
            if dat[1] in shiny_count and dat[2] in shiny_count[dat[1]]:
                odds = round(dat[0] / shiny_count[dat[1]][dat[2]], 0)
                form_suffix = "%02d" % form_mapper(dat[1], dat[2])
                mon = "%03d" % dat[1]
                mon_img = 'asset/pokemon_icons/pokemon_icon_' + mon + '_' + form_suffix + '_shiny.png'
                global_shiny_stats_v2.append({
                    'name':
                    mon_names[dat[1]],
                    'count':
                    dat[0],
                    'img':
                    mon_img,
                    'shiny':
                    shiny_count[dat[1]][dat[2]],
                    'odds':
                    odds,
                    'mon_id':
                    dat[1],
                    'form':
                    dat[2],
                    'gender':
                    dat[3],
                    'costume':
                    dat[4]
                })

        shiny_stats_perworker_v2 = []
        for worker in tmp_perworker_v2:
            shiny_stats_perworker_v2.append({
                'name': worker,
                'count': tmp_perworker_v2[worker]
            })

        shiny_stats_perhour_v2 = []
        for hour in tmp_perhour_v2:
            shiny_stats_perhour_v2.append([hour, tmp_perhour_v2[hour]])

        stats = {
            'empty': False,
            'shiny_statistics': shiny_stats_v2,
            'global_shiny_statistics': global_shiny_stats_v2,
            'per_worker': shiny_stats_perworker_v2,
            'per_hour': shiny_stats_perhour_v2
        }
        return jsonify(stats)
示例#4
0
def generate_quest(quest):
    quest_reward_type = questreward(quest['quest_reward_type'])
    quest_type = questtype(quest['quest_type'])
    if '{0}' in quest_type:
        quest_type = quest_type.replace('{0}', str(quest['quest_target']))

    item_id = 0
    item_amount = 1
    pokemon_id = '000'
    pokemon_name = ''
    item_type = ''
    pokemon_form = '00'
    pokemon_costume = '00'
    pokemon_asset_bundle = '00'

    if quest_reward_type == _('Item'):
        item_amount = quest['quest_item_amount']
        item_type = rewarditem(quest['quest_item_id'])
        item_id = quest['quest_item_id']
    elif quest_reward_type == _('Stardust'):
        item_amount = quest['quest_stardust']
        item_type = _('Stardust')
    elif quest_reward_type == _('Pokemon'):
        item_type = 'Pokemon'
        pokemon_name = i8ln(pokemonname(str(quest['quest_pokemon_id'])))
        pokemon_id = quest['quest_pokemon_id']
        pokemon_form = quest['quest_pokemon_form_id']
        pokemon_costume = quest['quest_pokemon_costume_id']
        if pokemon_form != '00':
            pokemon_asset_bundle = form_mapper(int(pokemon_id), pokemon_form)
    elif quest_reward_type == _('Energy'):
        item_type = _('Mega Energy')
        if quest['quest_pokemon_id'] and int(quest['quest_pokemon_id']) > 0:
            pokemon_name = i8ln(pokemonname(str(quest['quest_pokemon_id'])))
            pokemon_id = quest['quest_pokemon_id']
        else:
            pokemon_name = ''
        item_amount = quest['quest_item_amount']
    elif quest_reward_type == _("Candy"):
        # TODO maybe we should be doing deep parsing against the reward array
        item_amount = quest['quest_item_amount']
        item_type = quest_reward_type
        pokemon_id = quest['quest_pokemon_id']
        pokemon_name = pokemon_name = i8ln(pokemonname(str(pokemon_id)))

    if not quest['task']:
        quest_task = questtask(
            quest['quest_type'], quest['quest_condition'], quest['quest_target'], quest['quest_template'])
    else:
        quest_task = quest['task']

    quest_raw = ({
        'pokestop_id': quest['pokestop_id'],
        'name': quest['name'],
        'url': quest['image'],
        'latitude': quest['latitude'],
        'longitude': quest['longitude'],
        'timestamp': quest['quest_timestamp'],
        'item_id': item_id,
        'item_amount': item_amount,
        'item_type': item_type,
        'pokemon_id': pokemon_id,
        'pokemon_name': pokemon_name,
        'pokemon_form': pokemon_form,
        'pokemon_asset_bundle_id': pokemon_asset_bundle,
        'pokemon_costume': pokemon_costume,
        'quest_type': quest_type,
        'quest_type_raw': quest['quest_type'],
        'quest_reward_type': quest_reward_type,
        'quest_reward_type_raw': quest['quest_reward_type'],
        'quest_task': quest_task,
        'quest_target': quest['quest_target'],
        'quest_condition': quest['quest_condition'],
        'quest_template': quest['quest_template'],
        'is_ar_scan_eligible': quest['is_ar_scan_eligible'],

    })
    return quest_raw