예제 #1
0
파일: reports.py 프로젝트: akhand2222/olypy
def skill_xref_report(data, teaches_chain, outdir):
    skill_list = sorted(list(teaches_chain))
    sort_skill_xref_list = []
    for unit in skill_list:
        city_list = teaches_chain[unit]
        if len(city_list) > 0 and unit is not None:
            skill_rec = data[unit]
            for city in city_list:
                city_rec = data[city]
                where_rec = data[city_rec['LI']['wh'][0]]
                loc_dict = {
                    'id': city,
                    'oid': to_oid(city),
                    'name': get_name(city_rec)
                }
                sort_skill_xref_dict = {
                    'id': unit,
                    'oid': to_oid(unit),
                    'name': get_name(skill_rec),
                    'loc_dict': loc_dict,
                    'where_dict': get_where_info(city_rec, data),
                    'region_dict': get_region(city, data)
                }
                sort_skill_xref_list.append(sort_skill_xref_dict)
    outf = open(
        pathlib.Path(outdir).joinpath('master_skill_xref_report.html'), 'w')
    template = olymap.env.get_template('master_skill_xref_report.html')
    loc = sort_skill_xref_list
    outf.write(template.render(loc=loc))
예제 #2
0
def generate_topnav(currentpoint, outf, prefix, upperleftnav, upperrightnav,
                    xx, yy, map_matrix):
    upper_left_nav_dict = {}
    if upperleftnav:
        printpoint = map_matrix[yy - 10][xx - 10]
        upper_left_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    printpoint = map_matrix[yy - 10][xx]
    upper_nav_dict = {'oid': to_oid(printpoint), 'width': 840, 'height': 20}
    upper_right_nav_dict = {}
    if upperrightnav:
        printpoint = map_matrix[yy - 10][xx + 10]
        upper_right_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    top_nav_dict = {
        'upper_left_nav_dict': upper_left_nav_dict,
        'upper_nav_dict': upper_nav_dict,
        'upper_right_nav_dict': upper_right_nav_dict
    }
    return top_nav_dict
예제 #3
0
파일: maps.py 프로젝트: akhand2222/olypy
def generate_botnav(currentpoint, lowerleftnav, lowerrightnav, outf, prefix):
    lower_left_nav_dict = {}
    if lowerleftnav:
        printpoint = currentpoint + 990
        lower_left_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    printpoint = currentpoint + 1000
    lower_nav_dict = {'oid': to_oid(printpoint), 'width': 840, 'height': 20}
    lower_right_nav_dict = {}
    if lowerrightnav:
        printpoint = currentpoint + 1010
        lower_right_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    bot_nav_dict = {
        'lower_left_nav_dict': lower_left_nav_dict,
        'lower_nav_dict': lower_nav_dict,
        'lower_right_nav_dict': lower_right_nav_dict
    }
    return bot_nav_dict
예제 #4
0
파일: loc.py 프로젝트: olympiag3/olymap
def write_loc_routes_out(v, data, outf):
    if u.return_type(v) != 'city':
        write_province_destinations(v, data, outf)
    else:
        header_printed = False
        host_prov = data[v['LI']['wh'][0]]
        # If city is in a mountain, can't move from city to ocean
        if u.return_type(host_prov) != 'mountain':
            dest_loc_list = host_prov['LO']['pd']
            i = int(0)
            for pd in dest_loc_list:
                try:
                    pd_loc = data[pd]
                    if u.return_type(pd_loc) == 'ocean':
                        if not header_printed:
                            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
                            outf.write('<ul>\n')
                        pd_name = pd_loc['na'][0]
                        pd_loc_id = u.return_unitid(pd_loc)
                        out_distance = u.calc_exit_distance(v, pd_loc)
                        outf.write('<li>{}, to {} [{}], {}, {} {}</li>\n'
                                   .format(pd_directions[i],
                                           pd_name,
                                           anchor(to_oid(pd_loc_id)),
                                           data[u.region(pd_loc_id, data)]['na'][0],
                                           out_distance,
                                           'day' if out_distance == 1 else 'days'))
                except KeyError:
                    pass
                i = i + 1
        if not header_printed:
            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
            outf.write('<ul>\n')
        out_distance = u.calc_exit_distance(v, host_prov)
        outf.write('<li>Out, to {} [{}], {} {}</li>\n'
                   .format(host_prov['na'][0],
                           anchor(to_oid(u.return_unitid(host_prov))),
                           out_distance,
                           'day' if out_distance == 1 else 'days'))
        if 'LI' in v:
            if 'hl' in v['LI']:
                here_list = v['LI']['hl']
                for here in here_list:
                    here_record = data[here]
                    if u.is_road_or_gate(here_record):
                        to_record = data[here_record['GA']['tl'][0]]
                        if u.return_kind(here_record) == 'gate':
                            name = 'Gate'
                        else:
                            name = here_record['na'][0]
                        if not header_printed:
                            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
                            outf.write('<ul>\n')
                        write_province_destination(v,
                                                   to_record,
                                                   name,
                                                   data,
                                                   outf)
        if header_printed:
            outf.write('</ul>\n')
예제 #5
0
def generate_botnav(currentpoint, lowerleftnav, lowerrightnav, outf, prefix,
                    xx, yy, map_matrix):
    lower_left_nav_dict = {}
    if lowerleftnav:
        printpoint = map_matrix[yy + 10][xx - 10]
        lower_left_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    printpoint = map_matrix[yy + 10][xx]
    lower_nav_dict = {'oid': to_oid(printpoint), 'width': 840, 'height': 20}
    lower_right_nav_dict = {}
    if lowerrightnav:
        printpoint = map_matrix[yy + 10][xx + 10]
        lower_right_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    bot_nav_dict = {
        'lower_left_nav_dict': lower_left_nav_dict,
        'lower_nav_dict': lower_nav_dict,
        'lower_right_nav_dict': lower_right_nav_dict
    }
    return bot_nav_dict
예제 #6
0
파일: item.py 프로젝트: akhand2222/olypy
def get_project_cast(v, data):
    projected_cast = v.get('IM', {}).get('pc', [None])
    projected_cast_id = projected_cast[0]
    if projected_cast_id is not None:
        try:
            projected_cast_rec = data[projected_cast_id]
            try:
                region_id = u.region(projected_cast_id, data)
                region_rec = data[region_id]
                region_oid = to_oid(region_id)
                region_name = get_name(region_rec)
            except KeyError:
                region_id = None
                region_oid = None
                region_name = None
            projected_dict = {'id': projected_cast_id,
                              'oid': to_oid(projected_cast_id),
                              'name': get_name(projected_cast_rec),
                              'kind': u.return_kind(projected_cast_rec),
                              'region_id': region_id,
                              'region_oid': region_oid,
                              'region_name': region_name}
        except KeyError:
            projected_dict = {'id': None,
                              'oid': to_oid(projected_cast_id)}
        return projected_dict
    return None
예제 #7
0
파일: loc.py 프로젝트: olympiag3/olymap
def write_loc_page_header(v, k, data, outf):
    outf.write('<H3>')
    loc_type = u.return_type(v)
    outf.write('{} [{}]'.format(v['na'][0], to_oid(k)))
    outf.write(', {}'.format(loc_type))
    if u.return_type(v) != 'region':
        outf.write(', in')
        if loc_type == 'city':
            outf.write(' province ')
        try:
            loc2 = data[v['LI']['wh'][0]]
            outf.write(' {} [{}]'.format(loc2['na'][0],
                                         anchor(to_oid(u.return_unitid(loc2)))))
        except KeyError:
            pass
    # if 'city' in loc_type:
    #    outf.write(' [{}]'.format(anchor(to_oid(v['LI']['wh'][0]))))
    if 'SL' in v and 'sh' in v['SL']:
        outf.write(', safe haven')
    if 'LO' in v and 'hi' in v['LO']:
        outf.write(', hidden')
    if loc_type != 'ocean' and u.loc_depth(u.return_type(v)) == 2 \
            and data[u.region(k, data)]['na'][0] != 'faery' and data[u.region(k, data)]['na'][0] != 'hades':
        civ_level = 'wilderness'
        if 'LO' in v and 'lc' in v['LO']:
            if v['LO']['lc'][0] == '0':
                civ_level = 'wilderness'
            else:
                civ_level = 'civ-' + v['LO']['lc'][0]
        outf.write(', {}'.format(civ_level))
    outf.write('</H3>\n')
예제 #8
0
파일: maps.py 프로젝트: akhand2222/olypy
def generate_topnav(currentpoint, outf, prefix, upperleftnav, upperrightnav):
    upper_left_nav_dict = {}
    if upperleftnav:
        printpoint = currentpoint - 1010
        upper_left_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    printpoint = currentpoint - 1000
    upper_nav_dict = {'oid': to_oid(printpoint), 'width': 840, 'height': 20}
    upper_right_nav_dict = {}
    if upperrightnav:
        printpoint = currentpoint - 990
        upper_right_nav_dict = {
            'oid': to_oid(printpoint),
            'width': 20,
            'height': 20
        }
    top_nav_dict = {
        'upper_left_nav_dict': upper_left_nav_dict,
        'upper_nav_dict': upper_nav_dict,
        'upper_right_nav_dict': upper_right_nav_dict
    }
    return top_nav_dict
예제 #9
0
파일: char.py 프로젝트: akhand2222/olypy
def get_skills_known(v, data):
    skills_list = v.get('CH', {}).get('sl', [None])
    if skills_list[0] is None:
        return None
    skills_dict = defaultdict(list)
    if len(skills_list) > 0:
        for skill in range(0, len(skills_list), 5):
            skills_dict[skills_list[skill]].append(skills_list[skill + 1])
            skills_dict[skills_list[skill]].append(skills_list[skill + 2])
            skills_dict[skills_list[skill]].append(skills_list[skill + 3])
            skills_dict[skills_list[skill]].append(skills_list[skill + 4])
    sort_list = []
    for skill in skills_dict:
        skill_id = skill
        skills_rec = skills_dict[skill]
        know = skills_rec[0]
        sort_list.append([int(know) * -1, skill_id])
    sort_list.sort()
    printknown = False
    printunknown = False
    skill_list = []
    for skill in sort_list:
        skill_id = skill[1]
        skills_rec = skills_dict[skill_id]
        know = skills_rec[0]
        days_studied = skills_rec[1]
        if know == '2':
            if not printknown:
                printknown = True
            skillz = data[skill_id]
            if 'SK' in skillz and 'rs' in skillz['SK']:
                req_skill = skillz['SK']['rs'][0]
            else:
                req_skill = '0'
            skill_dict = {
                'oid': to_oid(skill_id),
                'name': get_name(skillz),
                'req_skill': req_skill,
                'known': 'Yes',
                'days_studied': None,
                'to_lear': None
            }
            skill_list.append(skill_dict)
        if know == '1':
            if not printunknown:
                printunknown = True
            skillz = data[skill_id]
            skill_dict = {
                'oid': to_oid(skill_id),
                'name': get_name(skillz),
                'req_skill': None,
                'known': 'No',
                'days_studied': days_studied,
                'to_learn': skillz['SK']['tl'][0]
            }
            skill_list.append(skill_dict)
    return skill_list
예제 #10
0
파일: loc.py 프로젝트: pombredanne/olypy
def write_loc_controlled_by(v, data, outf):
    if 'LI' in v and 'hl' in v['LI']:
        here_list = v['LI']['hl']
        if len(here_list) > 0:
            for loc in here_list:
                try:
                    charac = data[loc]
                except KeyError:
                    pass
                else:
                    if 'MI' in charac and 'gc' in charac['MI']:
                        if charac['MI']['gc'][0] != '0':
                            dest_loc = data[charac['MI']['gc'][0]]
                            dest_loc2 = data[dest_loc['LI']['wh'][0]]
                            outf.write('<p>Province controlled by ')
                            dest_name = dest_loc['na'][0]
                            dest_id = anchor(to_oid(u.return_unitid(dest_loc)))
                            dest_type = u.return_type(dest_loc)
                            outf.write('{} [{}], {}'.format(
                                dest_name, dest_id, dest_type))
                            dest_type2 = u.return_type(dest_loc2)
                            if dest_type2 != 'city':
                                dest_name2 = dest_loc2['na'][0]
                                dest_id2 = anchor(
                                    to_oid(u.return_unitid(dest_loc2)))
                                outf.write(', in {} [{}]'.format(
                                    dest_name2, dest_id2))
                            else:
                                dest_loc2 = data[dest_loc2['LI']['wh'][0]]
                                dest_name2 = dest_loc2['na'][0]
                                dest_id2 = anchor(
                                    to_oid(u.return_unitid(dest_loc2)))
                                outf.write(', in {} [{}]'.format(
                                    dest_name2, dest_id2))
                            try:
                                garrison = data[dest_loc2['LI']['hl'][0]]
                            except KeyError:
                                pass
                            else:
                                garr_type = u.return_type(garrison)
                                if garr_type == 'garrison':
                                    # calculate top of pledge chain
                                    if 'LI' in dest_loc and 'hl' in dest_loc[
                                            'LI']:
                                        top_guy = u.top_ruler(
                                            dest_loc['LI']['hl'][0], data)
                                        try:
                                            top_dog = data[top_guy]
                                        except KeyError:
                                            pass
                                        else:
                                            a = top_dog['na'][0]
                                            b = anchor(to_oid(top_guy))
                                            outf.write(
                                                '<br>Ruled by {} [{}]'.format(
                                                    a, b))
                            outf.write('</p>\n')
예제 #11
0
파일: loc.py 프로젝트: olympiag3/olymap
def write_loc_map_anchor(v, k, data, outf, instance, inst_dict, map_matrices):
    dimensions = inst_dict[instance]
    region = u.region(k, data)
    region_rec = data[region]
    province = u.province(k, data)
    if province == 0:
        return 0
    province_rec = data[province]
    custom = False
    save_rec = []
    save_world = ''
    try:
        save_rec = map_matrices[region_rec['na'][0].lower()]
        save_world = region_rec['na'][0].lower()
        custom = True
    except KeyError:
        try:
            save_rec = dimensions[region_rec['na'][0].lower()]
            save_world = region_rec['na'][0].lower()
        except KeyError:
            for world in dimensions:
                world_rec = dimensions[world]
                if world_rec[0] <= int(province) < world_rec[0] + (world_rec[2] * 100):
                    save_rec = world_rec
                    save_world = world
                    break
    # if len(save_rec) == 0:
    #     print('error {} {}'.format(to_oid(k),
    #                                u.return_type(v)))
    if len(save_rec) > 0 and not custom:
        world_rec = save_rec
        world = save_world
        x_coord = int(10 * math.floor((int(province) % 100) / 10))
        if x_coord >= world_rec[1] - 10:
            x_coord = world_rec[1] - 20
        y_coord = int(1000 * math.floor(int(province) / 1000))
        if y_coord >= world_rec[0] + (world_rec[2] * 100) - 1000:
            y_coord = world_rec[0] + (world_rec[2] * 100) - 2000
            if y_coord < world_rec[0]:
                y_coord = world_rec[0]
        final_coord = y_coord + x_coord
        if final_coord < world_rec[0]:
            final_coord = world_rec[0]
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        outf.write('<p>{}</p>\n'.format(anchor2(anchor_string, 'Return to map')))
    if len(save_rec) > 0 and custom:
        world_rec = save_rec
        world = save_world
        for xx in range(0, len(save_rec[0])):
            for yy in range(0,len(save_rec)):
                if save_rec[yy][xx] == province:
                    xxx = int(math.floor(xx / 10)) * 10
                    yyy = int(math.floor(yy / 10)) * 10
                    final_coord = save_rec[yyy][xxx]
                    break
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        outf.write('<p>{}</p>\n'.format(anchor2(anchor_string, 'Return to map')))
예제 #12
0
파일: loc.py 프로젝트: pombredanne/olypy
def print_wearable_wielding(v, data, outf):
    attack_max = 0
    missile_max = 0
    defense_max = 0
    attack = ''
    missile = ''
    defense = ''
    if 'il' in v:
        item_list = v['il']
        if len(item_list) > 0:
            for items in range(0, len(item_list), 2):
                itemz = data[item_list[items]]
                if 'IM' in itemz:
                    if 'ab' in itemz['IM']:
                        if int(itemz['IM']['ab'][0]) > attack_max:
                            attack_max = int(itemz['IM']['ab'][0])
                            attack = u.return_unitid(itemz)
                    if 'mb' in itemz['IM']:
                        if int(itemz['IM']['mb'][0]) > missile_max:
                            missile_max = int(itemz['IM']['mb'][0])
                            missile = u.return_unitid(itemz)
                    if 'db' in itemz['IM']:
                        if int(itemz['IM']['db'][0]) > defense_max:
                            defense_max = int(itemz['IM']['db'][0])
                            defense = u.return_unitid(itemz)
        # found something
        if attack != '' or missile != '' or defense != '':
            if attack == missile:
                missile = ''
        if attack == defense:
            defense = ''
        if attack != '' or missile != '':
            if attack == '':
                missile_rec = data[missile]
                outf.write(', wielding {} [{}]'.format(
                    missile_rec['na'][0],
                    anchor(to_oid(u.return_unitid(missile_rec)))))
            elif missile == '':
                attack_rec = data[attack]
                outf.write(', wielding {} [{}]'.format(
                    attack_rec['na'][0],
                    anchor(to_oid(u.return_unitid(attack_rec)))))
            else:
                missile_rec = data[missile]
                attack_rec = data[attack]
                outf.write(', wielding {} [{}] and {} [{}]'.format(
                    attack_rec['na'][0],
                    anchor(to_oid(u.return_unitid(attack_rec))),
                    missile_rec['na'][0],
                    anchor(to_oid(u.return_unitid(missile_rec)))))
        if defense != '':
            defense_rec = data[defense]
            outf.write(', wearing {} [{}]'.format(
                defense_rec['na'][0],
                anchor(to_oid(u.return_unitid(defense_rec)))))
예제 #13
0
파일: loc.py 프로젝트: akhand2222/olypy
def create_loc_to_dict_entry(data, direction, to_loc_rec, from_loc_rec, region_rec):
    to_dict = {'id': u.return_unitid(to_loc_rec),
               'oid': to_oid(u.return_unitid(to_loc_rec)),
               'name': get_name(to_loc_rec),
               'subkind': get_subkind(to_loc_rec, data),
               'is_port': u.is_port_city(to_loc_rec, data),
               'prov_port': u.province_has_port_city(to_loc_rec, data),
               'region_oid': to_oid(u.return_unitid(region_rec)),
               'region_name': get_name(region_rec),
               'direction': direction,
               'barrier': get_barrier(u.return_unitid(to_loc_rec), to_loc_rec, data),
               'distance': u.calc_exit_distance(from_loc_rec, to_loc_rec),
               'impassable': is_impassable(from_loc_rec, to_loc_rec, direction, data)}
    return to_dict
예제 #14
0
파일: loc.py 프로젝트: olympiag3/olymap
def write_ships(v, k, data, outf):
    outf.write('<li>\n')
    outf.write('{} [{}], {}'.format(v['na'][0],
                                    anchor(to_oid(k)),
                                    u.return_type(v)))
    if 'SL' in v:
        if 'bs' in v['SL']:
            storm = data[v['SL']['bs'][0]]
            if 'na' in storm:
                name = storm['na'][0]
            else:
                name = u.return_type(storm)
            outf.write(', bound {}-storm {} [{}] (strength: {})'.format(u.return_type(storm),
                                                                        name,
                                                                        anchor(to_oid(v['SL']['bs'][0])),
                                                                        storm['MI']['ss'][0]))
    if 'SL' in v:
        if 'de' in v['SL']:
            outf.write(', defense {}'.format(v['SL']['de'][0]))
        if 'eg' and 'er' in v['SL']:
            effort_given = int(v['SL']['eg'][0])
            effort_required = int(v['SL']['er'][0])
            pct_complete = int(float(effort_given / effort_required)*100)
            outf.write(', {}% completed'.format(pct_complete))
        if 'da' in v['SL']:
            outf.write(', {}% damaged'.format(v['SL']['da'][0]))
    pct_load = ship.calc_pct_loaded(data, k, v)
    if pct_load > 0:
        outf.write(', {}% loaded'.format(pct_load))
    if 'LI' in v and 'hl' in v['LI']:
        sub_here_list = v['LI']['hl']
        if len(sub_here_list) > 0:
            first_here = data[sub_here_list[0]]
            if u.return_kind(first_here) == 'char':
                outf.write(', owner:')
    outf.write('</li>\n')
    # see if stuff stacked under it
    if 'LI' in v and 'hl' in v['LI']:
        sub_here_list = v['LI']['hl']
        if len(sub_here_list) > 0:
            outf.write('<ul>\n')
            for sub_hl in sub_here_list:
                sub_sub_here = data[sub_hl]
                if u.return_kind(sub_sub_here) == 'loc':
                    write_sub_locs(v, sub_sub_here, sub_hl, data, outf)
                elif u.return_kind(sub_sub_here) == 'char':
                    write_characters(sub_sub_here,
                                     u.return_unitid(sub_sub_here),
                                     data, outf)
            outf.write('</ul>\n')
예제 #15
0
파일: ship.py 프로젝트: olympiag3/olymap
def write_ship_html(v, k, data, outdir):
    # generate ship page
    outf = open(pathlib.Path(outdir).joinpath(to_oid(k) + '.html'), 'w')
    outf.write('<HTML>\n')
    outf.write('<HEAD>\n')
    outf.write('<TITLE>{} [{}], {}'.format(v['na'][0], to_oid(k),
                                           u.return_type(v)))
    outf.write('</TITLE>\n')
    outf.write('</HEAD>\n')
    outf.write('<BODY>\n')
    write_ship_page_header(v, k, outf)
    write_ship_basic_info(v, k, data, outf)
    outf.write('</BODY>\n')
    outf.write('</HTML>\n')
    outf.close()
예제 #16
0
def write_unit_list(data, outf, v):
    if 'PL' in v and 'un' in v['PL']:
        unit_list = v['PL']['un']
        unit_list.sort()
        outf.write('<tr><td valign="top">Unit List:</td><td>')
        outf.write('<table>\n')
        columns = int(math.ceil(len(unit_list) / 3))
        for unit in range(0, columns):
            outf.write('<tr>')
            if (columns * 0) + unit < len(unit_list):
                char = data[unit_list[(columns * 0) + unit]]
                if 'na' in char:
                    name = char['na'][0]
                else:
                    name = u.return_type(char).capitalize()
                if name == 'Ni':
                    name = data[char['CH']['ni'][0]]['na'][0].capitalize()
                outf.write('<td>{} [{}]</td>'.format(name,
                                                     anchor(to_oid(u.return_unitid(char)))))
            else:
                outf.write('<td></td>')
            if (columns * 1) + unit < len(unit_list):
                char = data[unit_list[(columns * 1) + unit]]
                if 'na' in char:
                    name = char['na'][0]
                else:
                    name = u.return_type(char).capitalize()
                if name == 'Ni':
                    name = data[char['CH']['ni'][0]]['na'][0].capitalize()
                outf.write('<td>{} [{}]</td>'.format(name,
                                                     anchor(to_oid(u.return_unitid(char)))))
            else:
                outf.write('<td></td><td></td>')
            if (columns * 2) + unit < len(unit_list):
                char = data[unit_list[(columns * 2) + unit]]
                if 'na' in char:
                    name = char['na'][0]
                else:
                    name = u.return_type(char).capitalize()
                if name == 'Ni':
                    name = data[char['CH']['ni'][0]]['na'][0].capitalize()
                outf.write('<td>{} [{}]</td>'.format(name,
                                                     anchor(to_oid(u.return_unitid(char)))))
            else:
                outf.write('<td></td><td></td>')
            outf.write('</tr>\n')
        outf.write('</table>\n')
        outf.write('</td></tr>')
예제 #17
0
파일: ship.py 프로젝트: pombredanne/olypy
def write_ship_non_prominent(v, k, data, outf):
    seen_here_list = loop_here(data, k, False, True)
    list_length = len(seen_here_list)
    if list_length > 1:
        first_time = True
        printed_items = False
        for un in seen_here_list:
            unit_rec = data[un]
            if 'il' in unit_rec:
                item_list = unit_rec['il']
                for items in range(0, len(item_list), 2):
                    item_rec = data[item_list[items]]
                    if 'IT' in item_rec and 'pr' in item_rec[
                            'IT'] and item_rec['IT']['pr'][0] == '1':
                        pass
                    else:
                        if int(item_list[items + 1]) > 0:
                            weight = 0
                            qty = int(item_list[items + 1])
                            if 'wt' in item_rec['IT']:
                                weight = int(item_rec['IT']['wt'][0])
                            total_weight = int(qty * weight)
                            if first_time and total_weight > 0:
                                outf.write(
                                    '<p>Non-Prominent Items Onboard:</p>\n')
                                outf.write(
                                    '<table border="1" cellpadding="5">\n')
                                outf.write(
                                    '<tr><th>Possessor</th><th>Item</th><th>Qty</th><th>Weight</th></tr>'
                                )
                                first_time = False
                            if total_weight > 0:
                                printed_items = True
                                outf.write('<tr>')
                                outf.write('<td>{} [{}]</td>'.format(
                                    unit_rec['na'][0], anchor(to_oid(un))))
                                outf.write('<td>{} [{}]</td>'.format(
                                    item_rec['na'][0],
                                    anchor(to_oid(item_list[items]))))
                                outf.write(
                                    f'<td style="text-align:right">{qty:,d}</td>'
                                )
                                outf.write(
                                    f'<td style="text-align:right">{total_weight:,d}</td>'
                                )
                                outf.write('</tr>\n')
        if printed_items:
            outf.write('</table>\n')
예제 #18
0
파일: char.py 프로젝트: akhand2222/olypy
def get_pending_trades(v, data):
    trades_list = []
    if 'tl' in v:
        trade_list = v['tl']
        if len(trade_list) > 0:
            for trades in range(0, len(trade_list), 8):
                try:
                    itemz = data[trade_list[trades + 1]]
                except KeyError:
                    pass
                else:
                    direction = 'buy' if trade_list[trades] == '1' else 'sell'
                    price = int(trade_list[trades + 3])
                    qty = int(trade_list[trades + 2])
                    name = u.get_item_name(itemz) if int(
                        trade_list[trades +
                                   2]) == 1 else u.get_item_plural(itemz)
                    oid = to_oid(trade_list[trades + 1])
                    trade_dict = {
                        'direction': direction,
                        'price': price,
                        'qty': qty,
                        'oid': oid,
                        'name': name
                    }
                    trades_list.append(trade_dict)
    return trades_list
예제 #19
0
def write_player_html(v, k, data, outdir):
    # generate player page
    outf = open(pathlib.Path(outdir).joinpath(to_oid(k) + '.html'), 'w')
    outf.write('<HTML>\n')
    outf.write('<HEAD>\n')
    name = v['na'][0]
    outf.write('<TITLE>{} [{}]'.format(name, 
               to_oid(k)))
    outf.write('</TITLE>\n')
    outf.write('</HEAD>\n')
    outf.write('<BODY>\n')
    write_player_page_header(v, k, outf)
    write_player_basic_info(v, data, outf)
    outf.write('</BODY>\n')
    outf.write('</HTML>\n')
    outf.close()
예제 #20
0
파일: loc.py 프로젝트: olympiag3/olymap
def write_sub_locs(loc, sub_loc, k, data, outf):
    outf.write('<li>')
    outf.write('{} [{}], {}'.format(sub_loc['na'][0],
                                    anchor(to_oid(k)),
                                    u.return_type(sub_loc)))
    if 'LO' in sub_loc and 'hi' in sub_loc['LO']:
        outf.write(', hidden')
    out_distance = u.calc_exit_distance(loc, sub_loc)
    if out_distance > 0:
        outf.write(', {} {}'.format(out_distance,
                                    'day' if out_distance == 1 else 'days'))
    if 'SL' in sub_loc and 'de' in sub_loc['SL']:
        outf.write(', defense {}'.format(sub_loc['SL']['de'][0]))
    if 'castle' in u.return_type(sub_loc):
        if 'SL' in sub_loc:
            if 'cl' in sub_loc['SL']:
                if sub_loc['SL']['cl'][0] != '0':
                    outf.write(', level {}'.format(sub_loc['SL']['cl'][0]))
    if 'mine' in u.return_type(sub_loc):
        if 'SL' in sub_loc and 'sd' in sub_loc['SL']:
            if sub_loc['SL']['sd'][0] != '0':
                outf.write(', level {}'.format(int(sub_loc['SL']['sd'][0]) / 3))
    if 'SL' in sub_loc:
        if 'eg' and 'er' in sub_loc['SL']:
            effort_given = int(sub_loc['SL']['eg'][0])
            effort_required = int(sub_loc['SL']['er'][0])
            pct_complete = int(float(effort_given / effort_required)*100)
            outf.write(', {}% completed'.format(pct_complete))
    if 'SL' in sub_loc and 'da' in sub_loc['SL']:
        outf.write(', {}% damaged'.format(sub_loc['SL']['da'][0]))
    if 'LI' in sub_loc and 'hl' in sub_loc['LI']:
        sub_here_list = sub_loc['LI']['hl']
        if len(sub_here_list) > 0:
            first_here = data[sub_here_list[0]]
            if u.return_kind(first_here) == 'char':
                outf.write(', owner:')
    outf.write('</li>\n')
    # see if stuff stacked under it
    if 'LI' in sub_loc and 'hl' in sub_loc['LI']:
        sub_here_list = sub_loc['LI']['hl']
        if len(sub_here_list) > 0:
            outf.write('<ul>\n')
            for sub_hl in sub_here_list:
                sub_sub_here = data[sub_hl]
                if u.return_kind(sub_sub_here) == 'loc':
                    write_sub_locs(sub_loc,
                                   sub_sub_here,
                                   sub_hl,
                                   data,
                                   outf)
                elif u.return_kind(sub_sub_here) == 'char':
                    write_characters(sub_sub_here,
                                     u.return_unitid(sub_sub_here),
                                     data, outf)
                elif u.return_kind(sub_sub_here) == 'ship':
                    write_ships(sub_sub_here,
                                u.return_unitid(sub_sub_here),
                                data,
                                outf)
            outf.write('</ul>\n')
예제 #21
0
파일: char.py 프로젝트: akhand2222/olypy
def get_priest_skills(v, data):
    visions_list = []
    skill_751 = None
    skill_753 = None
    if return_char_skill(v, '751') is not None:
        skill_751 = True if return_char_skill(
            v, '751')[0]['known'] == True else False
    if return_char_skill(v, '753') is not None:
        skill_753 = True if return_char_skill(
            v, '753')[0]['known'] == True else False
    if 'CM' in v and 'vi' in v['CM']:
        vision_list = v['CM']['vi']
        for vision in vision_list:
            try:
                visioned = data[vision]
            except KeyError:
                vision_name = 'missing'
                vision_id = None
                vision_oid = None
            else:
                vision_name = visioned.get('na', [u.return_kind(visioned)])[0]
                vision_id = vision
                vision_oid = to_oid(vision)
            vision_dict = {
                'id': vision_id,
                'oid': vision_oid,
                'name': vision_name
            }
            visions_list.append(vision_dict)
    priest_dict = {
        'skill751': skill_751,
        'skill753': skill_753,
        'visions': visions_list
    }
    return priest_dict
예제 #22
0
파일: loc.py 프로젝트: akhand2222/olypy
def get_region(k, data):
    region_id = u.region(k, data)
    region_rec = data[region_id]
    region_dict = {'id': region_id,
                   'oid': to_oid(region_id),
                   'name': get_name(region_rec)}
    return region_dict
예제 #23
0
파일: char.py 프로젝트: akhand2222/olypy
def get_aura(box, data):
    if u.is_magician(box):
        rank = u.xlate_magetype(box, data)
        current_aura = get_current_aura(box)
        max_aura = u.get_max_aura(box)
        auraculum_aura = 0
        if u.get_auraculum_id(box) is not None:
            auraculum_id = u.get_auraculum_id(box)
            auraculum_box = data[auraculum_id]
            auraculum_aura = u.get_auraculum_aura(auraculum_box)
            auraculum_dict = {
                'id': auraculum_id,
                'oid': to_oid(auraculum_id),
                'name': get_name(auraculum_box),
                'aura': auraculum_aura
            }
        else:
            auraculum_dict = None
        aura_dict = {
            'rank': rank,
            'current_aura': current_aura,
            'max_aura': max_aura,
            'total_aura': max_aura + auraculum_aura,
            'auraculum_dict': auraculum_dict
        }
        return aura_dict
    return None
예제 #24
0
파일: reports.py 프로젝트: akhand2222/olypy
def gold_report(data, outdir):
    character_list = []
    for unit in data:
        unit_box = data[unit]
        if u.is_char(unit_box):
            character_list.append(unit)
    # character_list.sort()
    # for unit in character_list:
    sort_gold_list = []
    for unit in sorted(character_list, key=lambda x: int(x)):
        character_rec = data[unit]
        items_list = get_items_list(character_rec, data, False, '1')
        if items_list != []:
            if int(items_list[0]['qty']) > 10000:
                gold_dict = {
                    'id': unit,
                    'oid': to_oid(unit),
                    'name': get_name(character_rec),
                    'loc': get_loc(character_rec, data),
                    'qty': int(items_list[0]['qty'])
                }
                sort_gold_list.append(gold_dict)
    outf = open(pathlib.Path(outdir).joinpath('master_gold_report.html'), 'w')
    template = olymap.env.get_template('master_gold_report.html')
    char = sort_gold_list
    outf.write(template.render(char=char))
예제 #25
0
파일: maps.py 프로젝트: akhand2222/olypy
def write_cell(castle_chain, currentpoint, data, leftnav, outf, prefix,
               rightnav, x, y, rem_width, rem_height, instance):
    left_nav_dict = {}
    if x == 0 and y == 0:
        if leftnav:
            printpoint = currentpoint - 10
            left_nav_dict = {
                'oid': to_oid(printpoint),
                'width': 20,
                'height': 840
            }
    cell = currentpoint + (x + (y * 100))
    printpoint = str(cell)
    try:
        loc_rec = data[str(printpoint)]
    except:
        subkind = 'undefined'
        border_dict = {}
        contents_dict = {}
    else:
        subkind = u.return_subkind(loc_rec)
        border_dict = generate_border(data, loc_rec, outf, instance)
        contents_dict = generate_cell_contents(castle_chain, printpoint, data,
                                               loc_rec, outf)
    cell_dict = {
        'oid': to_oid(printpoint),
        'subkind': subkind,
        'border_dict': border_dict,
        'contents_dict': contents_dict
    }
    # except KeyError:
    #    outf.write('<td id="{}" class="x-sea">{}</td>\n'.format(to_oid(printpoint), to_oid(printpoint)))
    right_nav_dict = {}
    if x == 19 and y == 0:
        if rightnav:
            printpoint = currentpoint + 10
            right_nav_dict = {
                'oid': to_oid(printpoint),
                'width': 20,
                'height': 840
            }
    nav_dict = {
        'left_nav_dict': left_nav_dict,
        'cell_dict': cell_dict,
        'right_nav_dict': right_nav_dict
    }
    return nav_dict
예제 #26
0
def write_cell(castle_chain, currentpoint, data, leftnav, outf, prefix,
               rightnav, x, y, xx, yy, instance, map_matrix):
    left_nav_dict = {}
    if x == 0 and y == 0:
        if leftnav:
            printpoint = map_matrix[yy][xx - 10]
            left_nav_dict = {
                'oid': to_oid(printpoint),
                'width': 20,
                'height': 840
            }
    cell = map_matrix[yy + y][xx + x]
    printpoint = cell
    try:
        loc_rec = data[str(printpoint)]
    except:
        type = 'undefined'
        border_dict = {}
        contents_dict = {}
    else:
        type = u.return_subkind(loc_rec)
        border_dict = maps.generate_border(data, loc_rec, outf, instance)
        contents_dict = maps.generate_cell_contents(castle_chain, printpoint,
                                                    data, loc_rec, outf)
    cell_dict = {
        'oid': to_oid(printpoint),
        'type': type,
        'border_dict': border_dict,
        'contents_dict': contents_dict
    }
    # except KeyError:
    #    outf.write('<td id="{}" class="x-sea">{}</td>\n'.format(to_oid(printpoint), to_oid(printpoint)))
    right_nav_dict = {}
    if x == 19 and y == 0:
        if rightnav:
            printpoint = map_matrix[yy][xx + 10]
            right_nav_dict = {
                'oid': to_oid(printpoint),
                'width': 20,
                'height': 840
            }
    nav_dict = {
        'left_nav_dict': left_nav_dict,
        'cell_dict': cell_dict,
        'right_nav_dict': right_nav_dict
    }
    return nav_dict
예제 #27
0
파일: skill.py 프로젝트: olympiag3/olymap
def write_skill_html(v, k, data, teaches_chain, child_skills_chain,
                     skills_known_chain, outdir):
    # generate skill page
    outf = open(pathlib.Path(outdir).joinpath(to_oid(k) + '.html'), 'w')
    outf.write('<HTML>\n')
    outf.write('<HEAD>\n')
    name = v['na'][0]
    outf.write('<TITLE>{} [{}]'.format(name, to_oid(k)))
    outf.write('</TITLE>\n')
    outf.write('</HEAD>\n')
    outf.write('<BODY>\n')
    write_skill_page_header(v, k, outf)
    write_skill_basic_info(v, k, data, outf, teaches_chain, child_skills_chain,
                           skills_known_chain)
    outf.write('</BODY>\n')
    outf.write('</HTML>\n')
    outf.close()
예제 #28
0
def write_char_location(data, outf, v):
    if 'LI' in v and 'wh' in v['LI']:
        loc = data[v['LI']['wh'][0]]
        anch = anchor(to_oid(v['LI']['wh'][0]))
        outf.write('<tr>')
        outf.write('<td>Where:</td><td>{} [{}]</td>'.format(
            loc['na'][0], anch))
        outf.write('</tr>\n')
예제 #29
0
def write_char_faction(v, data, outf):
    # CH/lo
    if 'CH' in v and 'lo' in v['CH']:
        player = data[v['CH']['lo'][0]]
        outf.write('<tr>')
        outf.write('<td>Faction:</td>')
        outf.write('<td>{} [{}]</td></tr>\n'.format(
            player['na'][0], anchor(to_oid(u.return_unitid(player)))))
예제 #30
0
def write_char_pledged_to(v, data, outf):
    # CM/pl
    if 'CM' in v and 'pl' in v['CM']:
        pledged_to = data[v['CM']['pl'][0]]
        outf.write('<tr>')
        outf.write('<td>Pledged To:</td>')
        outf.write('<td>{} [{}]</td></tr>\n'.format(
            pledged_to['na'][0], anchor(to_oid(u.return_unitid(pledged_to)))))