2 from decimal
import Decimal
, ROUND_DOWN
, ROUND_UP
5 {'name': 'Rookie', 'id': 1, 'modifier': 1, 'points': 0}
,
6 {'name': 'Private', 'id': 2, 'modifier': 1.1, 'points': 250}
,
7 {'name': 'Private First Class', 'id': 3, 'modifier': 1.2, 'points': 1000}
,
8 {'name': 'Corporal', 'id': 4, 'modifier': 1.3, 'points': 3000}
,
9 {'name': 'Sergeant', 'id': 5, 'modifier': 1.4, 'points': 5000}
,
10 {'name': 'Staff Sergeant', 'id': 6, 'modifier': 1.5, 'points': 10000}
,
11 {'name': 'Sergeant First Class', 'id': 7, 'modifier': 1.6, 'points': 30000}
,
12 {'name': 'Master Sergeant', 'id': 8, 'modifier': 1.65, 'points': 60000}
,
13 {'name': 'First Sergeant', 'id': 9, 'modifier': 1.7, 'points': 100000}
,
14 {'name': 'Sergeant Major', 'id': 10, 'modifier': 1.75, 'points': 250000}
,
15 {'name': 'Command Sergeant Major', 'id': 11, 'modifier': 1.8, 'points': 500000}
,
16 {'name': 'Sergeant Major of the Army', 'id': 12, 'modifier': 1.85, 'points': 750000}
,
17 {'name': 'Second Lieutenant', 'id': 13, 'modifier': 1.9, 'points': 1000000}
,
18 {'name': 'First Lieutenant', 'id': 14, 'modifier': 1.93, 'points': 1500000}
,
19 {'name': 'Captain', 'id': 15, 'modifier': 1.96, 'points': 2500000}
,
20 {'name': 'Major', 'id': 16, 'modifier': 2, 'points': 5000000}
,
21 {'name': 'Lieutenant Colonel', 'id': 17, 'modifier': 2.03, 'points': 10000000}
,
22 {'name': 'Colonel', 'id': 18, 'modifier': 2.06, 'points': 17000000}
,
23 {'name': 'Brigadier General', 'id': 19, 'modifier': 2.1, 'points': 25000000}
,
24 {'name': 'Major General', 'id': 20, 'modifier': 2.12, 'points': 35000000}
,
25 {'name': 'Lieutenant General', 'id': 21, 'modifier': 2.14, 'points': 45000000}
,
26 {'name': 'General', 'id': 22, 'modifier': 2.16, 'points': 60000000}
,
27 {'name': 'General of the Army', 'id': 23, 'modifier': 2.18, 'points': 80000000}
,
28 {'name': 'Marshall', 'id': 24, 'modifier': 2.2, 'points': 100000000}
,
29 {'name': 'Field Marshall', 'id': 25, 'modifier': 2.22, 'points': 125000000}
,
30 {'name': 'Supreme Marshall', 'id': 26, 'modifier': 2.24, 'points': 175000000}
,
31 {'name': 'Generalissimus', 'id': 27, 'modifier': 2.26, 'points': 250000000}
,
32 {'name': 'Supreme Generalissimuss', 'id': 28, 'modifier': 2.28, 'points': 400000000}
,
33 {'name': 'Imperial Generalissimus', 'id': 29, 'modifier': 2.4, 'points': 600000000}
,
34 {'name': 'Legendary Generalissimuss', 'id': 30, 'modifier': 2.42, 'points': 800000000}
,
35 {'name': 'Imperator', 'id': 31, 'modifier': 2.44, 'points': 1000000000}
,
36 {'name': 'Imperator Caesar', 'id': 32, 'modifier': 2.46, 'points': 1500000000}
,
37 {'name': 'Deus Dimidiam', 'id': 33, 'modifier': 2.48, 'points': 2500000000}
,
38 {'name': 'Deus', 'id': 34, 'modifier': 2.5, 'points': 5000000000}
,
39 {'name': 'Summi Deus', 'id': 35, 'modifier': 2.52, 'points': 7500000000}
,
40 {'name': 'Deus Imperialis', 'id': 36, 'modifier': 2.54, 'points': 10000000000}
,
41 {'name': 'Deus Fabuloso', 'id': 37, 'modifier': 2.56, 'points': 15000000000}
,
42 {'name': 'Deus Ultimum', 'id': 38, 'modifier': 2.58, 'points': 20000000000}
,
46 {'id': 1, 'name': 'Mazovia'}
,
47 {'id': 2, 'name': 'Silesia'}
,
48 {'id': 3, 'name': 'Great Poland'}
,
49 {'id': 4, 'name': 'Mazuria'}
,
50 {'id': 5, 'name': 'Little Poland'}
,
51 {'id': 6, 'name': 'Pomerania'}
,
52 {'id': 7, 'name': 'Moscow'}
,
53 {'id': 8, 'name': 'Western Russia'}
,
54 {'id': 9, 'name': 'Siberia'}
,
55 {'id': 10, 'name': 'North Caucasus'}
,
56 {'id': 11, 'name': 'Kamchatka'}
,
57 {'id': 12, 'name': 'Northwestern Russia'}
,
58 {'id': 13, 'name': 'Brandenburgia'}
,
59 {'id': 14, 'name': 'Mecklenburg and Western Pomerania'}
,
60 {'id': 15, 'name': 'Saxony'}
,
61 {'id': 16, 'name': 'Bavaria'}
,
62 {'id': 17, 'name': 'Rhineland'}
,
63 {'id': 18, 'name': 'Baden-Wurttemberg'}
,
64 {'id': 19, 'name': 'Central France'}
,
65 {'id': 20, 'name': 'Northern France'}
,
66 {'id': 21, 'name': 'Jerusalem'}
,
67 {'id': 22, 'name': 'Rhone Alpes'}
,
68 {'id': 23, 'name': 'Great West'}
,
69 {'id': 24, 'name': 'Southwestern France'}
,
70 {'id': 25, 'name': 'Alsace Lorraine'}
,
71 {'id': 26, 'name': 'Andalusia'}
,
72 {'id': 27, 'name': 'Aragon Catalonia'}
,
73 {'id': 28, 'name': 'Madrid'}
,
74 {'id': 29, 'name': 'Galicia'}
,
75 {'id': 30, 'name': 'Castile Leon'}
,
76 {'id': 31, 'name': 'Castile-La Mancha'}
,
77 {'id': 32, 'name': 'London'}
,
78 {'id': 33, 'name': 'Northeastern England'}
,
79 {'id': 34, 'name': 'Wales'}
,
80 {'id': 35, 'name': 'Southwestern England'}
,
81 {'id': 36, 'name': 'Scotland'}
,
82 {'id': 37, 'name': 'Northern Ireland'}
,
83 {'id': 38, 'name': 'Sicily'}
,
84 {'id': 39, 'name': 'Naples'}
,
85 {'id': 40, 'name': 'Central Italy'}
,
86 {'id': 41, 'name': 'Tuscany'}
,
87 {'id': 42, 'name': 'Veneto'}
,
88 {'id': 43, 'name': 'Lombardia Piemonte'}
,
89 {'id': 44, 'name': 'Western Transdanubia'}
,
90 {'id': 45, 'name': 'Eastern Transdanubia'}
,
91 {'id': 46, 'name': 'Central Hungary'}
,
92 {'id': 47, 'name': 'Southern Great Plain'}
,
93 {'id': 48, 'name': 'Northern Great Plain'}
,
94 {'id': 49, 'name': 'Northern Great Hungary'}
,
95 {'id': 50, 'name': 'Crisana Banat'}
,
96 {'id': 51, 'name': 'Wallachia'}
,
97 {'id': 52, 'name': 'Dobrogea'}
,
98 {'id': 53, 'name': 'Transylvania'}
,
99 {'id': 54, 'name': 'Moldova'}
,
100 {'id': 55, 'name': 'Maramur Bucovina'}
,
101 {'id': 56, 'name': 'Sofia'}
,
102 {'id': 57, 'name': 'Plovdiv'}
,
103 {'id': 58, 'name': 'Burgas'}
,
104 {'id': 59, 'name': 'Varna'}
,
105 {'id': 60, 'name': 'Ruse'}
,
106 {'id': 61, 'name': 'Vidin'}
,
107 {'id': 62, 'name': 'Western Serbia'}
,
108 {'id': 63, 'name': 'Southern Serbia'}
,
109 {'id': 64, 'name': 'Sumadija'}
,
110 {'id': 65, 'name': 'Eastern Serbia'}
,
111 {'id': 66, 'name': 'Vojvodina'}
,
112 {'id': 67, 'name': 'Belgrade'}
,
113 {'id': 68, 'name': 'Slavonia'}
,
114 {'id': 69, 'name': 'Central Croatia'}
,
115 {'id': 70, 'name': 'Dalmatia'}
,
116 {'id': 71, 'name': 'Kvarner'}
,
117 {'id': 72, 'name': 'Istria'}
,
118 {'id': 73, 'name': 'Zagreb'}
,
119 {'id': 74, 'name': 'Herzegovina'}
,
120 {'id': 75, 'name': 'Sarajevo'}
,
121 {'id': 76, 'name': 'Northern Bosnia'}
,
122 {'id': 77, 'name': 'Posavina'}
,
123 {'id': 78, 'name': 'Central Bosnia'}
,
124 {'id': 79, 'name': 'Bosanska Krajina'}
,
125 {'id': 80, 'name': 'Crete'}
,
126 {'id': 81, 'name': 'Peloponnese'}
,
127 {'id': 82, 'name': 'Central Greece'}
,
128 {'id': 83, 'name': 'Epirus Thessaly'}
,
129 {'id': 84, 'name': 'Makedonia'}
,
130 {'id': 85, 'name': 'Thrace'}
,
131 {'id': 86, 'name': 'Western Republic of Macedonia'}
,
132 {'id': 87, 'name': 'Pelagonia'}
,
133 {'id': 88, 'name': 'Vardar'}
,
134 {'id': 89, 'name': 'Skopje'}
,
135 {'id': 90, 'name': 'Southeastern Republic of Macedonia'}
,
136 {'id': 91, 'name': 'Northeastern Republic of Macedonia'}
,
137 {'id': 92, 'name': 'Kiev'}
,
138 {'id': 93, 'name': 'Western Ukraine'}
,
139 {'id': 94, 'name': 'Central Ukraine'}
,
140 {'id': 95, 'name': 'Eastern Ukraine'}
,
141 {'id': 96, 'name': 'Black Sea Coast'}
,
142 {'id': 97, 'name': 'Crimea'}
,
143 {'id': 98, 'name': 'Smaland Scania'}
,
144 {'id': 99, 'name': 'Gotaland'}
,
145 {'id': 100, 'name': 'Svealand'}
,
146 {'id': 101, 'name': 'Bohus'}
,
147 {'id': 102, 'name': 'Jamtland'}
,
148 {'id': 103, 'name': 'Norrland Sameland'}
,
149 {'id': 104, 'name': 'Northern Portugal'}
,
150 {'id': 105, 'name': 'Beira'}
,
151 {'id': 106, 'name': 'Estremaduria Ribatejo'}
,
152 {'id': 107, 'name': 'Alentejo'}
,
153 {'id': 108, 'name': 'Algarve'}
,
154 {'id': 109, 'name': 'Azores'}
,
155 {'id': 110, 'name': 'Lithuania Eastern highland'}
,
156 {'id': 111, 'name': 'Sudovia'}
,
157 {'id': 112, 'name': 'Lithuania Western highland'}
,
158 {'id': 113, 'name': 'Samogitia'}
,
159 {'id': 114, 'name': 'Lithuania minor'}
,
160 {'id': 115, 'name': 'Dainava'}
,
161 {'id': 116, 'name': 'Eastern Vidzeme'}
,
162 {'id': 117, 'name': 'Latgalia'}
,
163 {'id': 118, 'name': 'Selija'}
,
164 {'id': 119, 'name': 'Western Vidzeme'}
,
165 {'id': 120, 'name': 'Zemgale'}
,
166 {'id': 121, 'name': 'Kurzeme'}
,
167 {'id': 122, 'name': 'Prekmurje'}
,
168 {'id': 123, 'name': 'Styria Carinthia'}
,
169 {'id': 124, 'name': 'Upper Carniola'}
,
170 {'id': 125, 'name': 'Slovenian Littoral'}
,
171 {'id': 126, 'name': 'Lower Carniola'}
,
172 {'id': 127, 'name': 'Inner Carniola'}
,
173 {'id': 128, 'name': 'Marmara'}
,
174 {'id': 129, 'name': 'Turkey Aegean Coast'}
,
175 {'id': 130, 'name': 'Turkey Mediterranean Coast'}
,
176 {'id': 131, 'name': 'Turkey Black Sea Coast'}
,
177 {'id': 132, 'name': 'Eastern Anatolia'}
,
178 {'id': 133, 'name': 'Central Anatolia'}
,
179 {'id': 134, 'name': 'North of Brazil'}
,
180 {'id': 135, 'name': 'Northeast of Brazil'}
,
181 {'id': 136, 'name': 'Southeast of Brazil'}
,
182 {'id': 137, 'name': 'Central Brazil'}
,
183 {'id': 138, 'name': 'Parana and Santa Catarina'}
,
184 {'id': 139, 'name': 'Rio Grande do Sul'}
,
185 {'id': 140, 'name': 'Patagonia'}
,
186 {'id': 141, 'name': 'Pampas'}
,
187 {'id': 142, 'name': 'Cuyo'}
,
188 {'id': 143, 'name': 'Tucuman'}
,
189 {'id': 144, 'name': 'Chaco'}
,
190 {'id': 145, 'name': 'Mesopotamia'}
,
191 {'id': 146, 'name': 'Northern Mexico'}
,
192 {'id': 147, 'name': 'Mexico Pacific Coast'}
,
193 {'id': 148, 'name': 'Yucatan Peninsula'}
,
194 {'id': 149, 'name': 'Central Mexico'}
,
195 {'id': 150, 'name': 'The Bajio'}
,
196 {'id': 151, 'name': 'Baja California'}
,
197 {'id': 152, 'name': 'Alaska'}
,
198 {'id': 153, 'name': 'USA Pacific Coast'}
,
199 {'id': 154, 'name': 'Western USA'}
,
200 {'id': 155, 'name': 'Central USA'}
,
201 {'id': 156, 'name': 'USA East Coast'}
,
202 {'id': 157, 'name': 'USA Gulf of Mexico'}
,
203 {'id': 158, 'name': 'Northern Canada'}
,
204 {'id': 159, 'name': 'Canada East Coast'}
,
205 {'id': 160, 'name': 'Quebec'}
,
206 {'id': 161, 'name': 'Manitoba'}
,
207 {'id': 162, 'name': 'Alberta'}
,
208 {'id': 163, 'name': 'Canada Pacific Coast'}
,
209 {'id': 164, 'name': 'Manchuria'}
,
210 {'id': 165, 'name': 'Northwest China'}
,
211 {'id': 166, 'name': 'Tibet'}
,
212 {'id': 167, 'name': 'North China'}
,
213 {'id': 168, 'name': 'South China'}
,
214 {'id': 169, 'name': 'East China'}
,
215 {'id': 170, 'name': 'Sumatra'}
,
216 {'id': 171, 'name': 'Java'}
,
217 {'id': 172, 'name': 'Kalimantan'}
,
218 {'id': 173, 'name': 'Sulawesi'}
,
219 {'id': 174, 'name': 'Papua'}
,
220 {'id': 175, 'name': 'Maluku Islands'}
,
221 {'id': 176, 'name': 'Western Iran'}
,
222 {'id': 177, 'name': 'Northern Iran'}
,
223 {'id': 178, 'name': 'Khorasan'}
,
224 {'id': 179, 'name': 'Southeastern Iran'}
,
225 {'id': 180, 'name': 'Fars'}
,
226 {'id': 181, 'name': 'Central Iran'}
,
227 {'id': 182, 'name': 'Jeolla'}
,
228 {'id': 183, 'name': 'Gyeongsang'}
,
229 {'id': 184, 'name': 'Chuncheon'}
,
230 {'id': 185, 'name': 'Gyeonggi'}
,
231 {'id': 186, 'name': 'North Chungcheong'}
,
232 {'id': 187, 'name': 'South Chungcheong'}
,
233 {'id': 188, 'name': 'Penghu'}
,
234 {'id': 189, 'name': 'Taipei'}
,
235 {'id': 190, 'name': 'Northeastern Taiwan'}
,
236 {'id': 191, 'name': 'Southeastern Taiwan'}
,
237 {'id': 192, 'name': 'Kaohsiung'}
,
238 {'id': 193, 'name': 'Western Taiwan'}
,
239 {'id': 194, 'name': 'Nazareth'}
,
240 {'id': 195, 'name': 'Judea and Samaria'}
,
241 {'id': 196, 'name': 'Beersheba'}
,
242 {'id': 197, 'name': 'Haifa'}
,
243 {'id': 198, 'name': 'Coastal Plain'}
,
244 {'id': 199, 'name': 'Southern India'}
,
245 {'id': 200, 'name': 'Western India'}
,
246 {'id': 201, 'name': 'Bengal Coast'}
,
247 {'id': 202, 'name': 'Central India'}
,
248 {'id': 203, 'name': 'Northern India'}
,
249 {'id': 204, 'name': 'Eastern India'}
,
250 {'id': 205, 'name': 'North Holland-Utrecht'}
,
251 {'id': 206, 'name': 'South Holland-Zeeland'}
,
252 {'id': 207, 'name': 'Western Australia'}
,
253 {'id': 208, 'name': 'Northern Territory'}
,
254 {'id': 209, 'name': 'South Australia'}
,
255 {'id': 210, 'name': 'Queensland'}
,
256 {'id': 211, 'name': 'New South Wales'}
,
257 {'id': 212, 'name': 'Victoria'}
,
258 {'id': 213, 'name': 'Groningen-Drenthe'}
,
259 {'id': 214, 'name': 'Friesland-Flevoland'}
,
260 {'id': 215, 'name': 'Gelderland-Overijssel'}
,
261 {'id': 216, 'name': 'Brabant-Limburg'}
,
262 {'id': 217, 'name': 'Western Finland'}
,
263 {'id': 218, 'name': 'Aland'}
,
264 {'id': 219, 'name': 'Eastern Finland'}
,
265 {'id': 220, 'name': 'Lapland'}
,
266 {'id': 221, 'name': 'Southern Finland'}
,
267 {'id': 222, 'name': 'Oulu'}
,
268 {'id': 223, 'name': 'Cork/Kerry'}
,
269 {'id': 224, 'name': 'Shannon'}
,
270 {'id': 225, 'name': 'South-east Ireland'}
,
271 {'id': 226, 'name': 'North-west Ireland'}
,
272 {'id': 227, 'name': 'Western Ireland'}
,
273 {'id': 228, 'name': 'Midlands-Ireland'}
,
274 {'id': 229, 'name': 'Zurich'}
,
275 {'id': 230, 'name': 'Ticino-Grisons'}
,
276 {'id': 231, 'name': 'Northeastern Switzerland'}
,
277 {'id': 232, 'name': 'Central Switzerland'}
,
278 {'id': 233, 'name': 'Bern-Valais'}
,
279 {'id': 234, 'name': 'Western Switzerland'}
,
280 {'id': 235, 'name': 'Antwerpen - Limburg'}
,
281 {'id': 236, 'name': 'Brussels'}
,
282 {'id': 237, 'name': 'Vlaanderen'}
,
283 {'id': 238, 'name': 'Hainaut - Namur'}
,
284 {'id': 239, 'name': 'Liege'}
,
285 {'id': 240, 'name': 'Luxembourg'}
,
286 {'id': 241, 'name': 'Sindh'}
,
287 {'id': 242, 'name': 'Balochistan'}
,
288 {'id': 243, 'name': 'Punjab'}
,
289 {'id': 244, 'name': 'Northern areas'}
,
290 {'id': 245, 'name': 'North West Frontier Province'}
,
291 {'id': 246, 'name': 'Tribal areas'}
,
292 {'id': 247, 'name': 'Sarawak'}
,
293 {'id': 248, 'name': 'Sabah'}
,
294 {'id': 249, 'name': 'Kuala Lumpur'}
,
295 {'id': 250, 'name': 'Pahang'}
,
296 {'id': 251, 'name': 'Northern Peninsular-Malaysia'}
,
297 {'id': 252, 'name': 'Southern Peninsular-Malaysia'}
,
298 {'id': 253, 'name': 'Svalbard'}
,
299 {'id': 254, 'name': 'Nord-Norge'}
,
300 {'id': 255, 'name': 'Trondelag'}
,
301 {'id': 256, 'name': 'Sorlandet'}
,
302 {'id': 257, 'name': 'Vestlandet'}
,
303 {'id': 258, 'name': 'Ostlandet'}
,
304 {'id': 259, 'name': 'Loreto'}
,
305 {'id': 260, 'name': 'Lima'}
,
306 {'id': 261, 'name': 'Southern coast of Peru'}
,
307 {'id': 262, 'name': 'Northwestern Peru'}
,
308 {'id': 263, 'name': 'Peru Andes'}
,
309 {'id': 264, 'name': 'Central Peru'}
,
310 {'id': 265, 'name': 'Punta Arenas'}
,
311 {'id': 266, 'name': 'Puerto Montt'}
,
312 {'id': 267, 'name': 'Santiago'}
,
313 {'id': 268, 'name': 'Atacama'}
,
314 {'id': 269, 'name': 'Antofagasta'}
,
315 {'id': 270, 'name': 'Tarapaca'}
,
316 {'id': 271, 'name': 'Amazonica'}
,
317 {'id': 272, 'name': 'Orinoquia'}
,
318 {'id': 273, 'name': 'Pacifica'}
,
319 {'id': 274, 'name': 'Caribe'}
,
320 {'id': 275, 'name': 'Bogota'}
,
321 {'id': 276, 'name': 'Andino'}
324 class InvalidValueError(Exception):
325 def __init__(self
, message
):
331 def fight_calc(firepower
, rank
, strength
, region_bonus
, ds_bonus
,
332 mu_bonus
, surrounded_debuff
):
333 firepowers
= {0: 0.5, # No weapon
334 1: 1.2, # Weapon quality 1
335 2: 1.4, # Weapon quality 2
336 3: 1.6, # Weapon quality 3
337 4: 1.8, # Weapon quality 4
338 5: 2.0 # Weapon quality 5
340 q_mult
= Decimal(firepowers
[firepower
])
341 r_mult
= Decimal(rank
['modifier'])
342 s_mult
= Decimal(strength
)
343 ds_mult
= Decimal(1.0 + (float(ds_bonus
) * 0.05))
344 mu_mult
= Decimal(1.0 + (float(mu_bonus
) / 100.0))
346 dmg
= q_mult
* r_mult
* s_mult
* ds_mult
* mu_mult
348 dmg
*= Decimal('1.2')
349 if surrounded_debuff
:
350 dmg
*= Decimal('0.8')
351 return dmg
.to_integral_value(ROUND_DOWN
)
353 def get_rank(rank_name
):
354 rank_name
= rank_name
.lower()
357 if rank_name
== rank
['name'].lower() or rank_name
== str(rank
['id']):
360 raise InvalidValueError('%s is not a valid military rank' % rank_name
)
362 def get_region_by_name(name
):
364 for region
in __regions
:
365 if name
== region
['name'].lower():
367 raise feed
.FeedError('Region @b%s@b does not exist.' % name
)
369 def get_region_by_id(id):
370 for region
in __regions
:
371 if id == region
['id']:
373 raise feed
.FeedError('Region ID @b%s@b does not exist.' % str(id))
376 if __name__
== '__main__':
379 api
= urllib2
.urlopen('http://primera.e-sim.org/apiRanks.html')
380 data
= json
.load(api
)
384 s
= " {'name': %%-%ds 'id': %%-3s 'modifier': %%-5s 'points': %%s},"
387 if len(i
['name']) > longest
:
388 longest
= len(i
['name'])
391 for i
in range(len(data
)):
392 print s
% longest
% ("'%s'," % data
[i
]['name'],
394 "%s," % data
[i
]['damageModifier'],
395 data
[i
]['damageRequired'],)