]> jfr.im git - irc/rizon/acid.git/blob - pyva/src/main/python/erepublik/api/utils.py
.gitignore: Ignore all pyva logs
[irc/rizon/acid.git] / pyva / src / main / python / erepublik / api / utils.py
1 from decimal import Decimal, ROUND_DOWN, ROUND_UP
2 import math
3
4 __ranks = [
5 {'name': 'Recruit', 'id': 1, 'points': 16},
6 {'name': 'Private', 'id': 2, 'points': 46},
7 {'name': 'Private*', 'id': 3, 'points': 81},
8 {'name': 'Private**', 'id': 4, 'points': 121},
9 {'name': 'Private***', 'id': 5, 'points': 171},
10 {'name': 'Corporal', 'id': 6, 'points': 251},
11 {'name': 'Corporal*', 'id': 7, 'points': 351},
12 {'name': 'Corporal**', 'id': 8, 'points': 451},
13 {'name': 'Corporal***', 'id': 9, 'points': 601},
14 {'name': 'Sergeant', 'id': 10, 'points': 801},
15 {'name': 'Sergeant*', 'id': 11, 'points': 1001},
16 {'name': 'Sergeant**', 'id': 12, 'points': 1401},
17 {'name': 'Sergeant***', 'id': 13, 'points': 1851},
18 {'name': 'Lieutenant', 'id': 14, 'points': 2351},
19 {'name': 'Lieutenant*', 'id': 15, 'points': 3001},
20 {'name': 'Lieutenant**', 'id': 16, 'points': 3751},
21 {'name': 'Lieutenant***', 'id': 17, 'points': 5001},
22 {'name': 'Captain', 'id': 18, 'points': 6501},
23 {'name': 'Captain*', 'id': 19, 'points': 9001},
24 {'name': 'Captain**', 'id': 20, 'points': 12001},
25 {'name': 'Captain***', 'id': 21, 'points': 15501},
26 {'name': 'Major', 'id': 22, 'points': 20001},
27 {'name': 'Major*', 'id': 23, 'points': 25001},
28 {'name': 'Major**', 'id': 24, 'points': 31001},
29 {'name': 'Major***', 'id': 25, 'points': 40001},
30 {'name': 'Commander', 'id': 26, 'points': 52001},
31 {'name': 'Commander*', 'id': 27, 'points': 67001},
32 {'name': 'Commander**', 'id': 28, 'points': 85001},
33 {'name': 'Commander***', 'id': 29, 'points': 110001},
34 {'name': 'Lt Colonel', 'id': 30, 'points': 140001},
35 {'name': 'Lt Colonel*', 'id': 31, 'points': 180001},
36 {'name': 'Lt Colonel**', 'id': 32, 'points': 225001},
37 {'name': 'Lt Colonel***', 'id': 33, 'points': 285001},
38 {'name': 'Colonel', 'id': 34, 'points': 355001},
39 {'name': 'Colonel*', 'id': 35, 'points': 435001},
40 {'name': 'Colonel**', 'id': 36, 'points': 540001},
41 {'name': 'Colonel***', 'id': 37, 'points': 660001},
42 {'name': 'General', 'id': 38, 'points': 800001},
43 {'name': 'General*', 'id': 39, 'points': 950001},
44 {'name': 'General**', 'id': 40, 'points': 1140001},
45 {'name': 'General***', 'id': 41, 'points': 1350001},
46 {'name': 'Field Marshal', 'id': 42, 'points': 1600001},
47 {'name': 'Field Marshal*', 'id': 43, 'points': 1875001},
48 {'name': 'Field Marshal**', 'id': 44, 'points': 2185001},
49 {'name': 'Field Marshal***', 'id': 45, 'points': 2550001},
50 {'name': 'Supreme Marshal', 'id': 46, 'points': 3000001},
51 {'name': 'Supreme Marshal*', 'id': 47, 'points': 3500000},
52 {'name': 'Supreme Marshal**', 'id': 48, 'points': 4150001},
53 {'name': 'Supreme Marshal***', 'id': 49, 'points': 4900001},
54 {'name': 'National Force', 'id': 50, 'points': 5800001},
55 {'name': 'National Force*', 'id': 51, 'points': 7000001},
56 {'name': 'National Force**', 'id': 52, 'points': 9000001},
57 {'name': 'National Force***', 'id': 53, 'points': 11500001},
58 {'name': 'World Class Force', 'id': 54, 'points': 14500001},
59 {'name': 'World Class Force*', 'id': 55, 'points': 18000001},
60 {'name': 'World Class Force**', 'id': 56, 'points': 22000001},
61 {'name': 'World Class Force***', 'id': 57, 'points': 26500001},
62 {'name': 'Legendary Force', 'id': 58, 'points': 31500001},
63 {'name': 'Legendary Force*', 'id': 59, 'points': 37000001},
64 {'name': 'Legendary Force**', 'id': 60, 'points': 43000001},
65 {'name': 'Legendary Force***', 'id': 61, 'points': 50000001},
66 {'name': 'God of War', 'id': 62, 'points': 100000001},
67 {'name': 'God of War*', 'id': 63, 'points': 200000001},
68 {'name': 'God of War**', 'id': 64, 'points': 500000001},
69 {'name': 'God of War***', 'id': 65, 'points': 90000000001}
70 ]
71
72 __domains = {
73 'constructions': {'name': 'Constructions'},
74 'manufacturing': {'name': 'Manufacturing'},
75 'land' : {'name': 'Land'}
76 }
77
78 __industries = (
79 {'id': 1, 'market_id': 1, 'name': 'Food', 'short': 'food', 'raw_material': 'Grain', 'domain': __domains['manufacturing']},
80 {'id': 2, 'market_id': 2, 'name': 'Weapons', 'short': 'weapons', 'raw_material': 'Iron', 'domain': __domains['manufacturing']},
81 {'id': 3, 'market_id': 3, 'name': 'Moving Tickets', 'short': 'moving-tickets', 'raw_material': 'Oil', 'domain': __domains['manufacturing']},
82 {'id': 4, 'market_id': 4, 'name': 'Housing', 'short': 'house', 'raw_material': 'Stone', 'domain': __domains['constructions']},
83 {'id': 5, 'market_id': 5, 'name': 'Hospital', 'short': 'hospital', 'raw_material': 'Stone', 'domain': __domains['constructions']},
84 {'id': 6, 'market_id': 6, 'name': 'Defense Systems', 'short': 'defense-system', 'raw_material': 'Stone', 'domain': __domains['constructions']},
85 {'id': 7, 'market_id': 7, 'name': 'Grain', 'short': 'grain', 'domain': __domains['land']},
86 {'id': 8, 'market_id': 7, 'name': 'Fruits', 'short': 'fruits', 'domain': __domains['land']},
87 {'id': 9, 'market_id': 7, 'name': 'Fish', 'short': 'fish', 'domain': __domains['land']},
88 {'id': 10, 'market_id': 7, 'name': 'Cattle', 'short': 'cattle', 'domain': __domains['land']},
89 {'id': 11, 'market_id': 7, 'name': 'Deer', 'short': 'deer', 'domain': __domains['land']},
90 {'id': 12, 'market_id': 12, 'name': 'Iron', 'short': 'iron', 'domain': __domains['land']},
91 {'id': 13, 'market_id': 12, 'name': 'Oil', 'short': 'oil', 'domain': __domains['land']},
92 {'id': 14, 'market_id': 12, 'name': 'Aluminum', 'short': 'aluminum', 'domain': __domains['land']},
93 {'id': 15, 'market_id': 12, 'name': 'Saltpeter', 'short': 'saltpeter', 'domain': __domains['land']},
94 {'id': 16, 'market_id': 12, 'name': 'Rubber', 'short': 'rubber', 'domain': __domains['land']},
95 {'id': 7, 'market_id': 7, 'name': 'Food Raw Material', 'short': 'food-raw-material', 'domain': __domains['land']},
96 {'id': 12, 'market_id': 12, 'name': 'Weapon Raw Material', 'short': 'weapon-raw-material', 'domain': __domains['land']}
97 )
98
99 class InvalidValueError(Exception):
100 def __init__(self, message):
101 self.msg = message
102
103 def __str__(self):
104 return str(self.msg)
105
106 def fight_calc(firepower, rank, strength, natural_enemy=False):
107 q_mult = 1 + Decimal(firepower) / 100
108 r_mult = Decimal(rank['id'])
109 s_mult = Decimal(strength)
110 inf = (((r_mult-1)/20 + Decimal('0.3')) * ((s_mult / 10) + 40)) * q_mult
111 if natural_enemy:
112 inf = inf + inf * Decimal('0.1')
113 return inf.to_integral_value(ROUND_DOWN)
114
115 def get_rank(rank_name):
116 if rank_name == None:
117 return __ranks[0]
118
119 rank_name = rank_name.lower()
120
121 for rank in __ranks:
122 if rank_name == rank['name'].lower() or rank_name == str(rank['id']):
123 return rank
124
125 raise InvalidValueError('%s is not a valid military rank' % rank_name)
126
127 def get_rank_by_points(rank_points):
128 i = 0
129 while rank_points > __ranks[i]['points']:
130 i += 1
131 else:
132 return __ranks[i]
133
134 def get_domain(val):
135 if isinstance(val, str) or isinstance(val, unicode):
136 if val in __domains:
137 return __domains[val]
138
139 for x in __domains:
140 if val.lower() in __domains[x]['name'].lower():
141 return __domains[x]
142
143 raise InvalidValueError('%s is not a valid domain' % val)
144
145 def get_industry(val):
146 val = val.lower() if not isinstance(val, dict) else val['name'].lower()
147
148 for industry in __industries:
149 if val in industry['short'] or val in industry['name'].lower():
150 return industry
151
152 raise InvalidValueError('%s is not a valid industry' % val)
153
154 def get_quality(val):
155 try:
156 val = int(val)
157 except:
158 raise InvalidValueError('%s is not a valid quality' % val)
159
160 if val < 0 or val > 5:
161 raise InvalidValueError('%d is not a valid quality.' % val)
162
163 return val