]>
Commit | Line | Data |
---|---|---|
685e346e A |
1 | import map |
2 | import utils | |
3 | from decimal import Decimal | |
4 | from feed import XmlFeed | |
5 | ||
6 | def from_id(id): | |
7 | return Region(XmlFeed('http://api.erepublik.com/v2/feeds/regions/%d' % int(id))) | |
8 | ||
9 | def from_name(name): | |
10 | id = map.get_region_id(name) | |
11 | ||
12 | if id == None: | |
13 | return None | |
14 | ||
15 | return from_id(id) | |
16 | ||
17 | def from_dict(dict): | |
18 | return from_id(dict['id']) | |
19 | ||
20 | class Region: | |
21 | """A region of Erepublik""" | |
22 | ||
23 | def __init__(self, f): | |
24 | self.id = f.int('/region/id') | |
25 | self.name = f.text('/region/name') | |
26 | self.population = f.int('/region/citizen-count') | |
27 | self.country = {'name': map.get_country_name(f.int('/region/country/id')), 'id': f.int('/region/country/id')} | |
28 | ||
29 | hospitals = f.elements('/region/buildings/hospitals/hospital') | |
30 | ||
31 | if hospitals == None: | |
32 | self.hospitals = None | |
33 | else: | |
34 | self.hospitals = [{ | |
35 | 'area': h.int('area-of-effect'), 'budget': h.int('wellness-budget'), 'quality': h.int('customization-level'), | |
36 | 'max_heal': h.int('max-heal-per-citizen')} for h in hospitals] | |
37 | ||
38 | defense = f.elements('/region/buildings/defense-systems/defense-system') | |
39 | ||
40 | if defense == None: | |
41 | self.defense = None | |
42 | else: | |
43 | self.defense = [{ | |
44 | 'area': ds.int('area-of-effect'), 'bonus': ds.int('defense-bonus'), 'quality': ds.int('customization-level'), | |
45 | 'durability': ds.int('durability')} for ds in defense] | |
46 | ||
47 | self.raw_materials = f.text('/region/raw-materials/name') | |
48 | ||
49 | self.neighbours = [{ | |
50 | 'country': {'name': map.get_country_name(neighbour.int('country/id')), 'id': neighbour.int('country/id')}, | |
51 | 'region': {'name': map.get_region_name(neighbour.int('region/id')), 'id': neighbour.int('region/id')}} | |
52 | for neighbour in f.elements('/region/neighbours/neighbour')] | |
53 | ||
54 | self.attack_cost = 25 + Decimal(self.population) / 10 | |
55 | ||
56 | def __str__(self): | |
57 | return '[%d] %s' % (self.id, self.name) |