]> jfr.im git - irc/rizon/acid.git/blame - pyva/pyva/src/main/python/esim/api/utils.py
Split pyva plugin into pyva.core and pyva.pyva
[irc/rizon/acid.git] / pyva / pyva / src / main / python / esim / api / utils.py
CommitLineData
685e346e
A
1import feed
2from decimal import Decimal, ROUND_DOWN, ROUND_UP
3
4__ranks = [
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},
43]
44
45__regions = [
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'}
322]
323
324class InvalidValueError(Exception):
325 def __init__(self, message):
326 self.msg = message
327
328 def __str__(self):
329 return str(self.msg)
330
331def 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
339 }
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))
345
346 dmg = q_mult * r_mult * s_mult * ds_mult * mu_mult
347 if region_bonus:
348 dmg *= Decimal('1.2')
349 if surrounded_debuff:
350 dmg *= Decimal('0.8')
351 return dmg.to_integral_value(ROUND_DOWN)
352
353def get_rank(rank_name):
354 rank_name = rank_name.lower()
355
356 for rank in __ranks:
357 if rank_name == rank['name'].lower() or rank_name == str(rank['id']):
358 return rank
359
360 raise InvalidValueError('%s is not a valid military rank' % rank_name)
361
362def get_region_by_name(name):
363 name = name.lower()
364 for region in __regions:
365 if name == region['name'].lower():
366 return region
367 raise feed.FeedError('Region @b%s@b does not exist.' % name)
368
369def get_region_by_id(id):
370 for region in __regions:
371 if id == region['id']:
372 return region
373 raise feed.FeedError('Region ID @b%s@b does not exist.' % str(id))
374
375
376if __name__ == '__main__':
377 import json
378 import urllib2
379 api = urllib2.urlopen('http://primera.e-sim.org/apiRanks.html')
380 data = json.load(api)
381 api.close()
382
383 print '__ranks = ['
384 s = " {'name': %%-%ds 'id': %%-3s 'modifier': %%-5s 'points': %%s},"
385 longest = 0
386 for i in data:
387 if len(i['name']) > longest:
388 longest = len(i['name'])
389
390 longest += 3
391 for i in range(len(data)):
392 print s % longest % ("'%s'," % data[i]['name'],
393 "%s," % (i+1),
394 "%s," % data[i]['damageModifier'],
395 data[i]['damageRequired'],)
396 print ']'