-
Notifications
You must be signed in to change notification settings - Fork 185
/
greatbuildings.js
906 lines (754 loc) · 74.6 KB
/
greatbuildings.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
/*
* **************************************************************************************
* Copyright (C) 2024 FoE-Helper team - All Rights Reserved
* You may use, distribute and modify this code under the
* terms of the AGPL license.
*
* See file LICENSE.md or go to
* https://github.com/dsiekiera/foe-helfer-extension/blob/master/LICENSE.md
* for full license details.
*
* **************************************************************************************
*/
let GreatBuildings =
{
Rewards: {
0: [5, 10, 15, 20, 30, 35, 45, 50, 60, 65, 75, 85, 95, 100, 110, 120, 130, 140, 150, 155, 165, 175, 185, 195, 205, 215, 225, 235, 245, 255, 265, 275, 285, 300, 310, 320, 330, 340, 350, 365, 375, 385, 395, 405, 420, 430, 440, 450, 465, 475, 485, 500, 510, 520, 535, 545, 555, 570, 580, 590, 605, 615, 630, 640, 650, 665, 675, 690, 700, 715, 725, 735, 750, 760, 775, 785, 800, 810, 825, 835, 850, 860, 875, 890, 900, 915, 925, 940, 950, 965, 975, 990, 1005, 1015, 1030, 1040, 1055, 1070, 1080, 1095, 1110, 1120, 1135, 1150, 1160, 1175, 1190, 1200, 1215, 1230, 1240, 1255, 1270, 1280, 1295, 1310, 1325, 1335, 1350, 1365, 1380, 1390, 1405, 1420, 1430, 1445, 1460, 1475, 1490, 1500, 1515, 1530, 1545, 1555, 1570, 1585, 1600, 1615, 1630, 1640, 1655, 1670, 1685, 1700, 1710, 1725, 1740, 1755, 1770, 1785, 1800, 1815, 1825, 1840, 1855, 1870, 1885, 1900, 1915, 1930, 1940, 1955, 1970, 1985, 2000, 2015, 2030, 2045, 2060, 2075, 2090, 2105, 2120, 2130, 2145, 2160, 2175, 2190, 2205, 2220, 2235, 2250, 2265, 2280, 2295, 2310, 2325, 2340, 2355, 2370, 2385, 2400, 2415, 2430, 2445, 2460, 2475, 2490, 2505, 2520, 2535],
2: [5, 10, 10, 15, 25, 30, 35, 40, 45, 55, 60, 65, 75, 80, 85, 95, 100, 110, 115, 125, 130, 140, 145, 155, 160, 170, 180, 185, 195, 200, 210, 220, 225, 235, 245, 250, 260, 270, 275, 285, 295, 300, 310, 320, 330, 340, 345, 355, 365, 375, 380, 390, 400, 410, 420, 430, 440, 445, 455, 465, 475, 485, 495, 505, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 890, 905, 915, 925, 935, 945, 955, 965, 975, 985, 995, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1085, 1095, 1105, 1115, 1125, 1135, 1150, 1160, 1170, 1180, 1190, 1200, 1215, 1225, 1235, 1245, 1255, 1270, 1280, 1290, 1300, 1310, 1325, 1335, 1345, 1355, 1370, 1380, 1390, 1400, 1415, 1425, 1435, 1445, 1460, 1470, 1480, 1490, 1505, 1515, 1525, 1540, 1550, 1560, 1570, 1585, 1595, 1605, 1620, 1630, 1640, 1655, 1665, 1675, 1690, 1700, 1710, 1725, 1735, 1745, 1760, 1770, 1780, 1790, 1805, 1815, 1830, 1840, 1850, 1865, 1875, 1885, 1900, 1910, 1920, 1935, 1945, 1960, 1970, 1980, 1995],
3: [5, 10, 15, 20, 25, 30, 40, 45, 50, 60, 65, 70, 80, 85, 95, 105, 110, 120, 125, 135, 145, 150, 160, 170, 175, 185, 195, 200, 210, 220, 230, 240, 245, 255, 265, 275, 285, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 405, 415, 425, 435, 450, 455, 465, 475, 485, 495, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 645, 655, 665, 675, 685, 695, 705, 720, 730, 740, 750, 760, 775, 785, 795, 805, 815, 825, 840, 850, 860, 870, 885, 895, 905, 915, 930, 940, 950, 960, 975, 985, 995, 1010, 1020, 1030, 1040, 1055, 1065, 1075, 1090, 1100, 1110, 1125, 1135, 1145, 1160, 1170, 1180, 1195, 1205, 1215, 1230, 1240, 1250, 1265, 1275, 1285, 1300, 1310, 1325, 1335, 1345, 1360, 1370, 1385, 1395, 1405, 1420, 1430, 1445, 1455, 1470, 1480, 1495, 1505, 1515, 1530, 1540, 1555, 1565, 1580, 1590, 1605, 1615, 1630, 1640, 1655],
4: [5, 10, 15, 20, 25, 35, 40, 50, 55, 65, 70, 80, 85, 95, 100, 110, 120, 130, 135, 145, 155, 165, 175, 180, 190, 200, 210, 220, 230, 240, 250, 255, 265, 275, 285, 295, 305, 315, 325, 335, 345, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 465, 475, 485, 495, 505, 515, 525, 540, 550, 560, 570, 585, 595, 605, 615, 625, 640, 650, 660, 675, 685, 695, 705, 720, 730, 740, 755, 765, 775, 790, 800, 810, 825, 835, 850, 860, 875, 885, 895, 910, 920, 930, 945, 955, 970, 980, 995, 1005, 1015, 1030, 1040, 1055, 1065, 1080, 1090, 1105, 1115, 1130, 1140, 1155, 1165, 1180, 1190, 1205, 1215, 1230, 1240, 1255, 1265, 1280, 1290, 1305, 1320, 1330, 1345, 1355, 1370, 1380, 1395, 1405, 1420, 1435, 1445, 1460, 1475, 1485, 1500, 1510, 1525, 1540, 1550, 1565, 1575, 1590, 1605, 1615, 1630, 1645, 1655, 1670, 1685, 1695, 1710, 1725, 1735, 1750, 1765, 1775, 1790, 1805, 1820, 1830, 1845, 1855, 1870, 1885, 1900, 1910, 1925, 1940, 1955, 1965, 1980, 1995, 2005, 2020, 2035, 2050, 2060, 2075, 2090, 2105, 2120, 2130, 2145, 2160, 2175, 2185, 2200, 2215, 2230, 2245, 2255, 2270, 2285, 2300, 2315, 2325, 2340, 2355],
5: [5, 10, 15, 20, 30, 35, 45, 50, 60, 65, 75, 85, 95, 100, 110, 120, 130, 140, 150, 155, 165, 175, 185, 195, 205, 215, 225, 235, 245, 255, 265, 275, 285, 300, 310, 320, 330, 340, 350, 365, 375, 385, 395, 405, 420, 430, 440, 450, 465, 475, 485, 500, 510, 520, 535, 545, 555, 570, 580, 590, 605, 615, 630, 640, 650, 665, 675, 690, 700, 715, 725, 735, 750, 760, 775, 785, 800, 810, 825, 835, 850, 860, 875, 890, 900, 915, 925, 940, 950, 965, 975, 990, 1005, 1015, 1030, 1040, 1055, 1070, 1080, 1095, 1110, 1120, 1135, 1150, 1160, 1175, 1190, 1200, 1215, 1230, 1240, 1255, 1270, 1280, 1295, 1310, 1325, 1335, 1350, 1365, 1380, 1390, 1405, 1420, 1430, 1445, 1460, 1475, 1490, 1500, 1515, 1530, 1545, 1555, 1570, 1585, 1600, 1615, 1630, 1640, 1655, 1670, 1685, 1700, 1710, 1725, 1740, 1755, 1770, 1785, 1800, 1815, 1825, 1840, 1855, 1870, 1885, 1900, 1915, 1930, 1940, 1955, 1970, 1985, 2000, 2015, 2030, 2045, 2060, 2075, 2090, 2105, 2120, 2130, 2145, 2160, 2175, 2190, 2205, 2220, 2235, 2250, 2265, 2280, 2295, 2310],
6: [5, 10, 15, 25, 30, 40, 45, 55, 65, 70, 80, 90, 100, 110, 120, 125, 140, 150, 155, 170, 180, 190, 200, 210, 220, 230, 240, 250, 265, 275, 285, 295, 310, 320, 330, 340, 355, 365, 375, 390, 400, 410, 425, 435, 450, 460, 470, 485, 495, 510, 520, 535, 545, 560, 570, 585, 595, 610, 620, 635, 645, 660, 670, 685, 700, 710, 725, 735, 750, 765, 775, 790, 805, 815, 830, 845, 855, 870, 885, 895, 910, 925, 935, 950, 965, 980, 990, 1005, 1020, 1035, 1045, 1060, 1075, 1090, 1105, 1115, 1130, 1145, 1160, 1175, 1185, 1200, 1215, 1230, 1245, 1260, 1275, 1285, 1300, 1315, 1330, 1345, 1360, 1375, 1390, 1405, 1415, 1430, 1445, 1460, 1475, 1490, 1505, 1520, 1535, 1550, 1565, 1580, 1595, 1610, 1625, 1640, 1655, 1670, 1685, 1700, 1715, 1730, 1745, 1760, 1775, 1790, 1805, 1820, 1835, 1850, 1865, 1880, 1895, 1910, 1925, 1940, 1955, 1975, 1990, 2005, 2020, 2035, 2050, 2065, 2080, 2095, 2110, 2125, 2145, 2160, 2175, 2190, 2205, 2220, 2235, 2255, 2270, 2285, 2300, 2315, 2330, 2350, 2365, 2380, 2395, 2410, 2430, 2445, 2460, 2475, 2490, 2510, 2525, 2540, 2555, 2570, 2585, 2605, 2620, 2635, 2650, 2670, 2685, 2700, 2715],
7: [5, 10, 15, 25, 35, 40, 50, 60, 65, 75, 85, 95, 105, 115, 125, 135, 145, 155, 170, 180, 190, 200, 210, 225, 235, 245, 260, 270, 280, 295, 305, 315, 330, 340, 350, 365, 375, 390, 400, 415, 425, 440, 450, 465, 480, 490, 505, 515, 530, 540, 555, 570, 580, 595, 610, 620, 635, 650, 665, 675, 690, 705, 715, 730, 745, 760, 775, 785, 800, 815, 830, 840, 855, 870, 885, 900, 915, 930, 940, 955, 970, 985, 1000, 1015, 1030, 1045, 1060, 1075, 1090, 1100, 1115, 1130, 1145, 1160, 1175, 1190, 1205, 1220, 1235, 1250, 1265, 1280, 1295, 1310, 1325, 1345, 1355, 1375, 1390, 1405, 1420, 1435, 1450, 1465, 1480, 1495, 1510, 1530, 1545, 1560, 1575, 1590, 1605, 1620, 1635, 1655, 1670, 1685, 1700, 1715, 1730, 1750, 1765, 1780, 1795, 1810, 1830, 1845, 1860, 1875, 1890, 1910, 1925, 1940, 1955, 1975, 1990, 2005, 2020, 2040, 2055, 2070, 2085, 2105, 2120, 2135],
8: [10, 10, 20, 25, 35, 45, 50, 60, 70, 80, 90, 100, 115, 120, 135, 145, 155, 165, 180, 190, 200, 215, 225, 235, 250, 260, 275, 285, 300, 310, 325, 335, 350, 360, 375, 390, 400, 415, 425, 440, 455, 465, 480, 495, 505, 520, 535, 550, 560, 575, 590, 605, 620, 635, 645, 660, 675, 690, 705, 720, 735, 745, 760, 775, 790, 805, 820, 835, 850, 865, 880, 895, 910, 925, 940, 955, 970, 985, 1000, 1015, 1030, 1045, 1065, 1075, 1095, 1110, 1125, 1140, 1155, 1170, 1185, 1200, 1220, 1235, 1250, 1265, 1280, 1300, 1315, 1330, 1345, 1360, 1375, 1395, 1410, 1425, 1440, 1460, 1475, 1490, 1505, 1525, 1540, 1555, 1575, 1590, 1605, 1625, 1640, 1655, 1670, 1690, 1705, 1720, 1740, 1755, 1775, 1790, 1805, 1825, 1840, 1855, 1875, 1890, 1910, 1925, 1940, 1960, 1975, 1995],
9: [10, 10, 20, 30, 35, 45, 55, 65, 75, 85, 95, 105, 120, 130, 140, 155, 165, 175, 190, 200, 215, 225, 240, 250, 265, 275, 290, 300, 315, 330, 340, 355, 370, 385, 395, 410, 425, 440, 450, 465, 480, 495, 510, 525, 535, 550, 565, 580, 595, 610, 625, 640, 655, 670, 685, 700, 715, 730, 745, 760, 775, 790, 805, 820, 835, 855, 870, 885, 900, 915, 930, 945, 965, 980, 995, 1010, 1025, 1045, 1060, 1075, 1090, 1110, 1125, 1140, 1160, 1175, 1190, 1205, 1225, 1240, 1255, 1275, 1290, 1305, 1325, 1340, 1355, 1375, 1390, 1410, 1425, 1440, 1460, 1475, 1490, 1510, 1525, 1545, 1560, 1580, 1595, 1615, 1630, 1650, 1665, 1685, 1700, 1715, 1735, 1755, 1770, 1790, 1805, 1825, 1840, 1860, 1875, 1895, 1915, 1930, 1950, 1965, 1985, 2000, 2020, 2040, 2055, 2075, 2095, 2110, 2130, 2145, 2165, 2185, 2200, 2220, 2240, 2255, 2275, 2295, 2310, 2330, 2350, 2365, 2385, 2405, 2420, 2440, 2460, 2480, 2495, 2515, 2535, 2555, 2570, 2590, 2610, 2630, 2645, 2665, 2685, 2705, 2720, 2740, 2760, 2780, 2800, 2815, 2835, 2855, 2875, 2895, 2910, 2930, 2950, 2970, 2990, 3010, 3030, 3045, 3065, 3085, 3105, 3125, 3145, 3165, 3180, 3200, 3220, 3240, 3260, 3280, 3300, 3320, 3340, 3360, 3375, 3400, 3415, 3435, 3455],
10: [10, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 115, 125, 135, 150, 160, 175, 185, 200, 210, 225, 240, 250, 265, 280, 290, 305, 320, 335, 345, 360, 375, 390, 405, 420, 430, 450, 460, 475, 490, 505, 520, 535, 550, 565, 580, 600, 615, 630, 645, 660, 675, 690, 705, 725, 740, 755, 770, 785, 800, 820, 835, 850, 870, 885, 900, 915, 935, 950, 965, 985, 1000, 1015, 1035, 1050, 1065, 1085, 1100, 1120, 1135, 1150, 1170, 1185, 1205, 1220, 1240, 1255, 1275, 1290, 1310, 1325, 1345, 1360, 1380, 1395, 1415, 1430, 1450, 1470, 1485, 1505, 1520, 1540, 1555, 1575, 1595, 1610, 1630, 1650, 1665, 1685, 1705, 1720, 1740, 1755, 1775, 1795, 1815, 1830, 1850, 1870, 1885, 1905, 1925, 1945, 1960, 1980, 2000, 2020, 2040, 2055, 2075, 2095, 2115, 2135, 2150, 2170, 2190, 2210, 2230, 2245, 2265, 2285, 2305, 2325, 2345, 2360, 2380],
11: [10, 10, 20, 30, 40, 50, 60, 75, 85, 95, 110, 120, 130, 145, 155, 170, 185, 195, 210, 225, 235, 250, 265, 280, 295, 305, 320, 335, 350, 365, 380, 395, 410, 425, 440, 455, 470, 485, 500, 515, 535, 550, 565, 580, 595, 615, 630, 645, 660, 675, 695, 710, 725, 745, 760, 775, 795, 810, 830, 845, 860, 880, 895, 915, 930, 945, 965, 985, 1000, 1020, 1035, 1050, 1070, 1090, 1105, 1125, 1140, 1160, 1175, 1195, 1215, 1230, 1250, 1265, 1285, 1305, 1320, 1340, 1360, 1375, 1395, 1415, 1435, 1450, 1470, 1490, 1510, 1525, 1545, 1565, 1585, 1600, 1620, 1640, 1660, 1680, 1695, 1715, 1735, 1755, 1775, 1790, 1810, 1830, 1850, 1870, 1890, 1910, 1930, 1950, 1965, 1985, 2005, 2025, 2045, 2065, 2085, 2105, 2125, 2145, 2165, 2185, 2205, 2225, 2245, 2265, 2285, 2305, 2325, 2345, 2365, 2385, 2405, 2425, 2445, 2465, 2485, 2505, 2525, 2550, 2570, 2590, 2610, 2630, 2650, 2670, 2690, 2710, 2735, 2755, 2775, 2795, 2815, 2835, 2855, 2880, 2900, 2920, 2940, 2960, 2985, 3005, 3025, 3045, 3065, 3085, 3110, 3130, 3150, 3170, 3195, 3215, 3235, 3255, 3280, 3300, 3320, 3345, 3365, 3385, 3405, 3430, 3450, 3470, 3495, 3515, 3535, 3555, 3580, 3600],
12: [10, 15, 20, 30, 40, 55, 65, 75, 85, 100, 115, 125, 140, 150, 165, 180, 190, 205, 220, 235, 250, 265, 280, 290, 305, 320, 335, 355, 365, 385, 400, 415, 430, 445, 460, 480, 495, 510, 525, 545, 560, 575, 590, 610, 625, 645, 660, 675, 695, 710, 730, 745, 765, 780, 800, 815, 835, 850, 870, 885, 905, 920, 940, 960, 975, 995, 1015, 1030, 1050, 1070, 1085, 1105, 1125, 1140, 1160, 1180, 1200, 1215, 1235, 1255, 1275, 1290, 1310, 1330, 1350, 1370, 1390, 1410, 1425, 1445, 1465, 1485, 1505, 1525, 1545, 1565, 1580, 1600, 1625, 1640, 1660, 1680, 1700, 1720, 1740, 1760, 1780, 1800, 1820, 1840, 1860, 1880, 1900, 1920, 1945, 1965, 1985, 2005, 2025, 2045, 2065, 2085, 2105, 2125, 2150, 2170, 2190, 2210, 2230, 2250, 2275, 2295, 2315, 2335, 2355, 2380, 2400, 2420, 2440, 2460, 2485, 2505, 2525, 2545, 2570, 2590, 2610, 2630, 2655, 2675, 2695, 2720, 2740, 2760, 2780, 2805, 2825, 2845, 2870, 2890],
13: [10, 15, 20, 35, 45, 55, 65, 80, 90, 105, 120, 130, 145, 160, 175, 185, 200, 215, 230, 245, 260, 275, 290, 305, 320, 335, 355, 370, 385, 400, 420, 435, 450, 465, 485, 500, 515, 535, 550, 570, 585, 605, 620, 640, 655, 675, 690, 710, 730, 745, 765, 780, 800, 820, 835, 855, 875, 890, 910, 930, 945, 965, 985, 1005, 1025, 1040, 1060, 1080, 1100, 1120, 1140, 1155, 1175, 1195, 1215, 1235, 1255, 1275, 1295, 1315, 1335, 1355, 1375, 1395, 1415, 1435, 1455, 1475, 1495, 1515, 1535, 1555, 1575, 1595, 1615, 1640, 1660, 1680, 1700, 1720, 1740, 1760, 1780, 1805, 1825, 1845, 1865, 1885, 1910, 1930, 1950, 1970, 1990, 2015, 2035, 2055, 2080, 2100, 2120, 2140, 2165, 2185, 2205, 2230, 2250, 2270, 2295, 2315, 2335, 2360, 2380, 2400, 2425, 2445, 2470, 2490, 2515, 2535, 2555, 2580, 2600, 2625, 2645, 2665, 2690],
14: [10, 15, 25, 35, 45, 60, 70, 85, 95, 110, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 290, 305, 320, 335, 355, 370, 385, 405, 420, 435, 455, 470, 490, 505, 525, 540, 560, 575, 595, 615, 630, 650, 670, 685, 705, 725, 740, 760, 780, 800, 815, 835, 855, 875, 895, 915, 930, 950, 970, 990, 1010, 1030, 1050, 1070, 1090, 1110, 1130, 1150, 1170, 1190, 1210, 1230, 1250, 1270, 1290, 1310, 1335, 1355, 1375, 1395, 1415, 1435, 1455, 1480, 1500, 1520, 1540, 1560, 1585, 1605, 1625, 1645, 1670, 1690, 1710, 1735, 1755, 1775, 1800, 1820, 1840, 1865, 1885, 1905, 1930, 1950, 1975, 1995, 2015, 2040, 2060, 2085, 2105, 2130, 2150, 2170, 2195, 2215, 2240, 2260, 2285, 2305, 2330, 2350, 2375, 2395, 2420, 2445, 2465, 2490, 2510, 2535, 2555, 2580, 2605, 2625, 2650, 2675, 2695, 2720, 2740, 2765, 2790, 2810, 2835, 2860, 2880, 2905, 2930, 2950, 2975, 3000, 3025, 3050, 3070, 3095, 3120, 3140, 3165, 3190, 3215, 3235, 3260, 3285, 3310, 3335, 3355, 3380, 3405, 3430, 3455, 3480, 3500, 3525, 3550, 3575, 3600, 3625, 3650, 3670, 3695, 3720, 3745, 3770, 3795, 3820, 3845, 3870, 3895, 3915, 3940, 3965, 3990, 4015, 4040, 4065, 4090, 4115, 4140],
15: [10, 15, 25, 35, 45, 60, 75, 85, 100, 115, 130, 145, 160, 170, 190, 205, 220, 235, 250, 265, 285, 300, 315, 335, 350, 370, 385, 400, 420, 440, 455, 475, 490, 510, 525, 545, 565, 585, 600, 620, 640, 660, 675, 695, 715, 735, 755, 775, 795, 815, 830, 850, 870, 895, 910, 930, 950, 970, 995, 1015, 1035, 1055, 1075, 1095, 1115, 1135, 1155, 1180, 1200, 1220, 1240, 1260, 1285, 1305, 1325, 1350, 1370, 1390, 1410, 1435, 1455, 1475, 1500, 1520, 1545, 1565, 1585, 1610, 1630, 1650, 1675, 1695, 1720, 1740, 1765, 1785, 1810, 1830, 1855, 1875, 1900, 1920, 1945, 1965, 1990, 2015, 2035, 2060, 2080, 2105, 2125, 2150, 2175, 2195, 2220, 2245, 2265, 2290, 2315, 2335, 2360, 2385, 2405, 2430, 2455, 2480, 2500, 2525, 2550, 2575, 2595, 2620, 2645, 2670, 2690, 2715, 2740, 2765, 2790, 2815, 2835, 2860, 2885, 2910, 2935, 2960, 2985, 3010, 3030, 3055, 3080, 3105, 3130, 3155, 3180, 3205, 3230, 3255, 3280, 3305, 3330, 3355, 3380, 3405, 3430, 3455, 3480, 3505, 3530, 3555, 3580, 3605, 3630, 3655, 3680, 3705, 3730, 3755, 3780, 3805, 3830, 3855, 3885, 3910, 3935, 3960, 3985, 4010, 4035, 4060, 4085, 4115, 4140, 4165, 4190, 4215, 4240, 4270, 4295, 4320, 4345],
16: [10, 15, 25, 35, 50, 65, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 230, 245, 260, 280, 295, 310, 330, 350, 365, 385, 400, 420, 440, 455, 475, 495, 510, 530, 550, 570, 590, 605, 625, 645, 665, 685, 705, 725, 745, 765, 785, 805, 825, 845, 865, 890, 910, 930, 950, 970, 990, 1015, 1035, 1055, 1075, 1100, 1120, 1140, 1160, 1185, 1205, 1225, 1250, 1270, 1295, 1315, 1335, 1360, 1380, 1405, 1425, 1450, 1470, 1495, 1515, 1540, 1560, 1585, 1605, 1630, 1650, 1675, 1700, 1720, 1745, 1770, 1790, 1815, 1835, 1860, 1885, 1905, 1930, 1955, 1980, 2000, 2025, 2050, 2070, 2095, 2120, 2145, 2170, 2190, 2215, 2240, 2265, 2290, 2310, 2335, 2360, 2385, 2410, 2435, 2460, 2485, 2505, 2530, 2555, 2580, 2605, 2630, 2655, 2680, 2705, 2730, 2755, 2780, 2805, 2830, 2855, 2880, 2905, 2930, 2955, 2980, 3005, 3030, 3055, 3080, 3105, 3135, 3160, 3185, 3210, 3235, 3260, 3285, 3310, 3340, 3365, 3390, 3415],
17: [10, 15, 25, 40, 50, 65, 80, 95, 110, 125, 140, 155, 170, 185, 205, 220, 235, 255, 270, 290, 305, 325, 345, 360, 380, 400, 415, 435, 455, 475, 495, 510, 530, 550, 570, 590, 610, 630, 650, 670, 690, 715, 735, 755, 775, 795, 815, 840, 860, 880, 900, 925, 945, 965, 990, 1010, 1030, 1055, 1075, 1095, 1120, 1140, 1165, 1185, 1210, 1230, 1255, 1275, 1300, 1320, 1345, 1365, 1390, 1415, 1435, 1460, 1485, 1505, 1530, 1555, 1575, 1600, 1625, 1645, 1670, 1695, 1720, 1745, 1765, 1790, 1815, 1840, 1860, 1885, 1910, 1935, 1960, 1985, 2010, 2030, 2055, 2080, 2105, 2130, 2155, 2180, 2205, 2230, 2255, 2280, 2305, 2330, 2355, 2380, 2405, 2430, 2455, 2480, 2505, 2530, 2555, 2580, 2610, 2635, 2660, 2685, 2710, 2735, 2760, 2785, 2815, 2840, 2865, 2890, 2915, 2945, 2970, 2995, 3020, 3050, 3075, 3100, 3125, 3155, 3180, 3205, 3230, 3260, 3285, 3310, 3340, 3365, 3390, 3415, 3445, 3470, 3500, 3525, 3550, 3580],
18: [10, 15, 25, 40, 55, 70, 80, 95, 115, 125, 145, 160, 175, 195, 210, 230, 245, 265, 280, 300, 320, 335, 355, 375, 395, 415, 435, 455, 470, 490, 510, 535, 550, 575, 595, 615, 635, 655, 675, 700, 720, 740, 760, 785, 805, 825, 850, 870, 890, 915, 935, 960, 980, 1005, 1025, 1050, 1070, 1095, 1115, 1140, 1160, 1185, 1210, 1230, 1255, 1280, 1300, 1325, 1350, 1370, 1395, 1420, 1445, 1470, 1490, 1515, 1540, 1565, 1590, 1615, 1635, 1660, 1685, 1710, 1735, 1760, 1785, 1810, 1835, 1860, 1885, 1910, 1935, 1960, 1985, 2010, 2035, 2060, 2085, 2110, 2135, 2160, 2185, 2215, 2240, 2265, 2290, 2315, 2340, 2365, 2395, 2420, 2445, 2470, 2495, 2525, 2550, 2575, 2600, 2630, 2655, 2680, 2710, 2735, 2760, 2790, 2815, 2840, 2870, 2895],
19: [10, 15, 30, 40, 55, 70, 85, 100, 115, 130, 150, 165, 185, 200, 220, 235, 255, 275, 295, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490, 510, 530, 550, 575, 595, 615, 635, 660, 680, 700, 725, 745, 770, 790, 810, 835, 855, 880, 905, 925, 950, 970, 995, 1015, 1040, 1065, 1085, 1110, 1135, 1160, 1180, 1205, 1230, 1255, 1275, 1300, 1325, 1350, 1375, 1400, 1425, 1450, 1470, 1500, 1520, 1545, 1570, 1595, 1620, 1650, 1670, 1695, 1725, 1750, 1775, 1800, 1825, 1850, 1875, 1900, 1930, 1955, 1980, 2005, 2030, 2060, 2085, 2110, 2135, 2160, 2190, 2215, 2240, 2265, 2295, 2320, 2350, 2375, 2400, 2430, 2455, 2480, 2510, 2535, 2565, 2590, 2615, 2645, 2670, 2700, 2725, 2755, 2780, 2810, 2835, 2865, 2890, 2920, 2945, 2975, 3000, 3030, 3060, 3085, 3115, 3140, 3170, 3195, 3225, 3255, 3280, 3310, 3340],
20: [10, 15, 30, 40, 60, 70, 90, 105, 120, 135, 155, 170, 190, 210, 225, 245, 265, 285, 305, 325, 340, 360, 380, 405, 425, 445, 465, 485, 505, 530, 550, 570, 595, 615, 635, 660, 680, 705, 725, 750, 770, 795, 820, 840, 865, 890, 910, 935, 960, 980, 1005, 1030, 1055, 1080, 1100, 1125, 1150, 1175, 1200, 1225, 1250, 1275, 1300, 1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 1525, 1550, 1575, 1600, 1630, 1655, 1680, 1705, 1730, 1760, 1785, 1810, 1835, 1865, 1890, 1915, 1945, 1970, 1995, 2025, 2050, 2075, 2105, 2130, 2160, 2185, 2210, 2240, 2265, 2295, 2320, 2350, 2375, 2405, 2430, 2460, 2485, 2515, 2540, 2570, 2600, 2625, 2655, 2680, 2710, 2740, 2765, 2795, 2825, 2850, 2880, 2910, 2935, 2965, 2995, 3025, 3050, 3080, 3110, 3135, 3165, 3195],
21: [10, 15, 30, 45, 60, 75, 90, 105, 125, 140, 160, 180, 195, 215, 235, 255, 275, 295, 315, 335, 355, 375, 395, 415, 440, 460, 480, 500, 525, 545, 570, 590, 615, 635, 660, 680, 705, 730, 750, 775, 800, 820, 845, 870, 895, 920, 940, 965, 990, 1015, 1040, 1065, 1090, 1115, 1140, 1165, 1190, 1215, 1240, 1265, 1290, 1315, 1340, 1370, 1395, 1420, 1445, 1475, 1500, 1525, 1550, 1575, 1605, 1630, 1660, 1685, 1710, 1740, 1765, 1790, 1820, 1845, 1875, 1900, 1930, 1955, 1980, 2010, 2035, 2065, 2095, 2120, 2150, 2175, 2205, 2230, 2260, 2290, 2315, 2345, 2375, 2400, 2430, 2460, 2485, 2515, 2545, 2570, 2600, 2630, 2660, 2690, 2715, 2745, 2775, 2805, 2830, 2860, 2890, 2920, 2950, 2980, 3010, 3040, 3065, 3095, 3125, 3155, 3185, 3215, 3245, 3275, 3305, 3335, 3365, 3395, 3425, 3455, 3485, 3515, 3545, 3575, 3605, 3635, 3670, 3700, 3730, 3760, 3790, 3820, 3850, 3880, 3910, 3945, 3975, 4005, 4035, 4065, 4100, 4130],
22: [10, 20, 30, 45, 60, 75, 95, 110, 130, 145, 165, 185, 205, 220, 240, 260, 280, 305, 325, 345, 365, 385, 410, 430, 450, 475, 495, 520, 540, 565, 590, 610, 635, 655, 680, 705, 730, 750, 775, 800, 825, 850, 875, 900, 925, 950, 975, 1000, 1025, 1050, 1075, 1100, 1125, 1150, 1180, 1205, 1230, 1255, 1280, 1310, 1335, 1360, 1390, 1415, 1440, 1465, 1495, 1520, 1550, 1575, 1605, 1630, 1655, 1685, 1715, 1740, 1770, 1795, 1825, 1850, 1880, 1905, 1935, 1965, 1990, 2020, 2050, 2075, 2105, 2135, 2160, 2190, 2220, 2250, 2275, 2305, 2335, 2365, 2395, 2420],
23: [10, 20, 30, 45, 65, 80, 95, 115, 135, 150, 170, 190, 210, 230, 250, 270, 290, 310, 335, 355, 375, 400, 420, 445, 465, 490, 515, 535, 560, 585, 605, 630, 655, 680, 705, 730, 750, 775, 800, 825, 850, 875, 905, 930, 955, 980, 1005, 1030, 1055, 1085, 1110, 1135, 1160, 1190, 1215, 1240, 1270, 1295, 1325, 1350, 1375, 1405, 1430, 1460, 1485, 1515, 1545, 1570, 1600, 1625, 1655, 1680, 1710, 1740, 1765, 1795, 1825, 1855, 1880, 1910, 1940, 1970, 1995, 2025, 2055, 2085, 2115, 2145, 2175, 2200, 2230, 2260, 2290, 2320, 2350, 2380, 2410, 2440, 2470, 2500, 2530, 2560, 2590, 2620, 2650, 2685, 2715, 2745, 2775, 2805, 2835, 2865, 2895, 2930, 2960, 2990, 3020, 3055, 3085, 3115, 3145]
},
GreatBuildingsData: [
{ 'ID': 'X_AllAge_Expedition', 'GoodCosts': 0, 'FPProductions': [7.09, 7.39, 7.7, 8, 8.31, 8.62, 8.77, 9.08, 9.39, 9.7, 10.01, 10.17, 10.47, 10.78, 10.93, 11.24, 11.55, 11.7, 12.01, 12.17, 12.48, 12.63, 12.94, 13.1, 13.41, 13.57, 13.73, 14.04, 14.2, 14.36, 14.52, 14.83, 14.99, 15.15, 15.31, 15.47, 15.64, 15.8, 15.96, 16.12, 16.28, 16.45, 16.61, 16.77, 16.93, 17.1, 17.11, 17.28, 17.44, 17.6, 17.77, 17.78, 17.94, 18.11, 18.12, 18.29, 18.45, 18.47, 18.63, 18.64, 18.81, 18.98, 18.99, 19.16, 19.17, 19.34, 19.35, 19.52, 19.53, 19.54, 19.71, 19.72, 19.89, 19.9, 19.91, 20.08, 20.1, 20.11, 20.28, 20.29, 20.3, 20.47, 20.49, 20.5, 20.67, 20.68, 20.69, 20.71, 20.88, 20.89, 20.9, 20.92, 21.09, 21.1, 21.11, 21.12, 21.14, 21.15, 21.32, 21.33, 21.35, 21.36], 'GoodsProductions': [12.98, 13.54, 14.1, 14.66, 15.23, 15.8, 16.09, 16.66, 17.24, 17.81, 18.38, 18.67, 19.23, 19.8, 20.08, 20.65, 21.22, 21.51, 22.07, 22.37, 22.94, 23.23, 23.8, 24.09, 24.67, 24.96, 25.26, 25.83, 26.13, 26.43, 26.73, 27.3, 27.6, 27.9, 28.2, 28.5, 28.8, 29.1, 29.41, 29.7, 30.01, 30.31, 30.62, 30.92, 31.22, 31.53, 31.56, 31.86, 32.17, 32.47, 32.78, 32.81, 33.11, 33.42, 33.45, 33.76, 34.07, 34.1, 34.4, 34.43, 34.74, 35.05, 35.07, 35.39, 35.41, 35.73, 35.75, 36.07, 36.09, 36.12, 36.44, 36.46, 36.78, 36.81, 36.83, 37.14, 37.18, 37.2, 37.52, 37.54, 37.57, 37.89, 37.92, 37.94, 38.26, 38.29, 38.31, 38.34, 38.66, 38.69, 38.72, 38.74, 39.06, 39.09, 39.11, 39.14, 39.17, 39.2, 39.52, 39.54, 39.57, 39.6] }, //Temple of Relics
{ 'ID': 'X_BronzeAge_Landmark1', 'GoodCosts': 0, 'GoodsProductions': [6, 7, 8, 9, 10, 11, 12, 13, 14, 15], GoodsIncrease: 1 }, //Babel
{ 'ID': 'X_BronzeAge_Landmark2', 'GoodCosts': 0, 'AttackProductions': [3, 6, 9, 12, 15, 18, 21, 24, 27, 30], AttackIncrease: 0.5 }, //Zeus
{ 'ID': 'X_IronAge_Landmark2', 'GoodCosts': 0, 'GoodsProductions': [8, 9, 10, 12, 13, 14, 15, 17, 18, 19], GoodsIncrease: 1 }, //Lighthouse Alexandria
{ 'ID': 'X_EarlyMiddleAge_Landmark1', 'GoodCosts': 20, 'FPProductions': [1, 1, 2, 2, 3, 3, 4, 4, 5, 6] }, //Hagia
{ 'ID': 'X_EarlyMiddleAge_Landmark2', 'GoodCosts': 20, 'AttackProductions': [3, 6, 9, 12, 15, 18, 21, 24, 27, 30], AttackIncrease: 0.5 }, //Aachen
{ 'ID': 'X_EarlyMiddleAge_Landmark3', 'GoodCosts': 20, 'GoodsProductions': [5, 5, 6, 7, 8, 8, 9, 10, 11, 12], GoodsIncrease: 1 }, //Galata
{ 'ID': 'X_HighMiddleAge_Landmark1', 'GoodCosts': 25, 'GoodsProductions': [10, 12, 13, 15, 17, 18, 20, 22, 24, 25], GoodsIncrease: 1 }, //St. Mark
{ 'ID': 'X_LateMiddleAge_Landmark3', 'GoodCosts': 30, 'FPProductions': [1, 1, 2, 2, 3, 3, 4, 4, 5, 6], 'AttackProductions': [3, 6, 9, 12, 15, 18, 21, 24, 27, 30], 'AttackIncrease': 0.5 }, //Castel del Monte
{ 'ID': 'X_ColonialAge_Landmark1', 'GoodCosts': 40, 'GoodsProductions': [7, 8, 9, 10, 11, 12, 13, 14, 16, 17], GoodsIncrease: 1 }, //Frauenkirche
{ 'ID': 'X_IndustrialAge_Landmark1', 'GoodCosts': 50, 'GoodsProductions': [11, 12, 14, 16, 18, 20, 21, 23, 25, 27], GoodsIncrease: 1 }, //Royal Albert
{ 'ID': 'X_PostModernEra_Landmark1', 'GoodCosts': 75, 'FPProductions': [2, 2, 3, 4, 5, 6, 6, 7, 8, 10] }, //Cape
{ 'ID': 'X_ContemporaryEra_Landmark2', 'GoodCosts': 100, 'FPProductions': [1, 1, 2, 2, 3, 3, 4, 4, 5, 6] }, //Inno Tower
{ 'ID': 'X_FutureEra_Landmark1', 'GoodCosts': 150, 'Rewards': [0.1, 0.12, 0.14, 0.17, 0.19, 0.22, 0.24, 0.26, 0.28, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.795, 0.8, 0.805, 0.81, 0.815, 0.82, 0.825, 0.83, 0.835, 0.84, 0.845, 0.85, 0.855, 0.86, 0.865, 0.87, 0.875, 0.88, 0.885, 0.89, 0.895, 0.9, 0.901, 0.902, 0.903, 0.904, 0.905, 0.906, 0.907, 0.908, 0.909, 0.91, 0.911, 0.912, 0.913, 0.914, 0.915, 0.916, 0.917, 0.918, 0.919, 0.92, 0.921, 0.922, 0.923, 0.924, 0.925, 0.926, 0.927, 0.928, 0.929, 0.93, 0.931, 0.932, 0.933, 0.934, 0.935, 0.936, 0.937, 0.938, 0.939, 0.94, 0.941, 0.942, 0.943, 0.944, 0.945, 0.946, 0.947, 0.948, 0.949, 0.95, 0.951, 0.952, 0.953, 0.954, 0.955, 0.956, 0.957, 0.958, 0.959, 0.96, 0.961, 0.962, 0.963, 0.964, 0.965, 0.966, 0.967, 0.968, 0.969, 0.97, 0.971, 0.972, 0.973, 0.974, 0.975, 0.976, 0.977, 0.978, 0.979, 0.98, 0.981, 0.982, 0.983, 0.984, 0.985, 0.986, 0.987, 0.988, 0.989, 0.99, 0.991, 0.992, 0.993, 0.994, 0.995, 0.996, 0.997, 0.998, 0.999, 1, 1] }, //Arche
{ 'ID': 'X_FutureEra_Landmark2', 'GoodCosts': 150, 'GoodsProductions': [13, 16, 18, 20, 22, 25, 27, 29, 31, 34], GoodsIncrease: 1 }, //Rainforest
{ 'ID': 'X_ArcticFuture_Landmark2', 'GoodCosts': 200, 'FPProductions': [2, 2, 3, 4, 5, 6, 6, 7, 8, 10], 'AttackProductions': [4.87, 5.07, 5.28, 5.5, 5.73, 5.96, 6.2, 6.45, 6.71, 6.98, 7.39, 7.53, 7.67, 7.82, 7.96, 8.12, 8.27, 8.43, 8.59, 8.75, 8.91, 9.08, 9.25, 9.43, 9.6, 9.79, 9.97, 10.15, 10.34, 10.54, 10.73, 10.93, 11.13, 11.34, 11.54, 11.76, 11.97, 12.19, 12.41, 12.63, 12.86, 13.09, 13.32, 13.56, 13.79, 14.04, 14.28, 14.53, 14.78, 15.03, 15.29, 15.55, 15.81, 16.08, 16.35, 16.62, 16.89, 17.17, 17.45, 17.73, 18.02, 18.3, 18.59, 18.89, 19.18, 19.48, 19.77, 20.07, 20.38, 20.68, 20.99, 21.3, 21.61, 21.92, 22.23, 22.55, 22.86, 23.18, 23.5, 23.82, 24.14, 24.46, 24.78, 25.1, 25.43, 25.75, 26.08, 26.4, 26.73, 27.05, 27.37, 27.7, 28.02, 28.35, 28.67, 29, 29.32, 29.64, 29.96, 30.28, 30.6, 30.92, 31.24, 31.55, 31.87, 32.18, 32.49, 32.8, 33.11, 33.42, 33.72, 34.03, 34.33, 34.62, 34.92, 35.21, 35.51, 35.8, 36.08, 36.37, 36.65, 36.93, 37.21, 37.48, 37.75, 38.02, 38.29, 38.55, 38.81, 39.07, 39.32, 39.57, 39.82, 40.06, 40.31, 40.54, 40.78, 41.01, 41.24, 41.47, 41.69, 41.91, 42.13, 42.34, 42.56, 42.76, 42.97, 43.17, 43.37, 43.56, 43.76, 43.95, 44.13, 44.31, 44.5, 44.85, 44.85, 45.02, 45.19, 45.35, 45.67, 45.67, 45.83, 45.98] }, //Arctic Orangerie
{ 'ID': 'X_OceanicFuture_Landmark1', 'GoodCosts': 300, 'GoodsProductions': [10, 12, 14, 15, 17, 19, 21, 22, 24, 26], GoodsIncrease: 1 }, //Atlantis
{ 'ID': 'X_OceanicFuture_Landmark2', 'GoodCosts': 300, 'FPProductions': [1, 1, 3, 3, 4, 4, 5, 5, 6, 8] }, //Kraken
{ 'ID': 'X_OceanicFuture_Landmark3', 'GoodCosts': 300, 'Rewards': [0.17, 0.19, 0.21, 0.23, 0.25, 0.27, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35, 0.35, 0.36, 0.37, 0.38, 0.38, 0.39, 0.4, 0.4, 0.41, 0.42, 0.42, 0.43, 0.43, 0.44, 0.45, 0.45, 0.46, 0.47, 0.47, 0.48, 0.49, 0.49, 0.5, 0.5, 0.51, 0.52, 0.52, 0.53, 0.53, 0.54, 0.54, 0.55, 0.55, 0.56, 0.56, 0.57, 0.57, 0.58, 0.58, 0.59, 0.59, 0.6, 0.6, 0.61, 0.61, 0.61, 0.62, 0.62, 0.62, 0.63, 0.63, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.65, 0.66, 0.66, 0.66, 0.67, 0.67, 0.67, 0.67, 0.68, 0.68, 0.68, 0.68, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.7, 0.7, 0.7], Charges: [4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15] }, // Blue Galaxy
{ 'ID': 'X_VirtualFuture_Landmark1', 'GoodCosts': 0, 'AttackProductions': [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], AttackIncrease: 0.5 }, //Terrakotta
{ 'ID': 'X_VirtualFuture_Landmark2', 'GoodCosts': 500, 'Rewards': [0.28, 0.36, 0.44, 0.52, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.281, 1.3125, 1.3435, 1.3745, 1.4055, 1.7232, 1.7598, 1.7958, 1.8318, 1.8672, 1.9026, 1.9368, 1.971, 2.0046, 2.0376, 2.07, 2.1018, 2.4885, 2.5242, 2.5585, 2.5928, 2.6257, 2.6586, 2.6901, 2.7202, 2.7503, 2.7797, 2.8077, 2.835, 2.8616, 3.3, 3.328, 3.3552, 3.3824, 3.408, 3.4328, 3.4568, 3.4792, 3.5016, 3.5232, 3.544, 3.564, 3.5824, 3.6008, 3.6184, 3.6352, 3.652, 4.1256, 4.1427, 4.1589, 4.1742, 4.1886, 4.203, 4.2165, 4.23, 4.2417, 4.2543, 4.2651, 4.2759, 4.2867, 4.2966, 4.3056, 4.3155, 4.3236, 4.3317, 4.3398, 4.3479, 4.3551, 4.3614, 4.3677, 4.374, 4.3803, 4.3857, 4.3011, 4.3965, 4.4019, 4.4064, 4.4109, 4.4154, 4.419, 4.914, 4.918, 4.922, 4.926, 4.93, 4.933, 4.936, 4.939, 4.942, 4.945, 4.948, 4.95, 4.953, 4.955, 4.957, 4.959, 4.961, 4.963, 4.965, 4.967, 4.968, 4.97, 4.971, 4.973, 4.974, 4.975, 4.976, 4.978, 4.979, 4.98, 4.981, 4.982, 4.982, 4.983, 4.984, 4.985, 4.986] }, //Himeji
{ 'ID': 'X_SpaceAgeMars_Landmark1', 'GoodCosts': 750, 'GoodsProductions': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 53, 55, 58, 60, 63, 65, 68, 70, 73, 75, 77, 80, 82, 85, 87, 90, 92, 95, 97, 99, 101, 103, 106, 108, 110, 112, 113, 115, 117, 119, 120, 122, 123, 125, 126, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 138, 139, 140, 140, 141, 141, 142, 142, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 146, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149]}, //Star Gazer
{ 'ID': 'X_SpaceAgeAsteroidBelt_Landmark1', 'GoodCosts': 1000, 'Rewards': [0.28, 0.36, 0.44, 0.52, 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.281, 1.3125, 1.3435, 1.3745, 1.4055, 1.7232, 1.7598, 1.7958, 1.8318, 1.8672, 1.9026, 1.9368, 1.971, 2.0046, 2.0376, 2.07, 2.1018, 2.4885, 2.5242, 2.5585, 2.5928, 2.6257, 2.6586, 2.6901, 2.7202, 2.7503, 2.7797, 2.8077, 2.835, 2.8616, 3.3, 3.328, 3.3552, 3.3824, 3.408, 3.4328, 3.4568, 3.4792, 3.5016, 3.5232, 3.544, 3.564, 3.5824, 3.6008, 3.6184, 3.6352, 3.652, 4.1256, 4.1427, 4.1589, 4.1742, 4.1886, 4.203, 4.2165, 4.23, 4.2417, 4.2543, 4.2651, 4.2759, 4.2867, 4.2966, 4.3056, 4.3155, 4.3236, 4.3317, 4.3398, 4.3479, 4.3551, 4.3614, 4.3677, 4.374, 4.3803, 4.3857, 4.3011, 4.3965, 4.4019, 4.4064, 4.4109, 4.4154, 4.419, 4.914, 4.918, 4.922, 4.926, 4.93, 4.933, 4.936, 4.939, 4.942, 4.945, 4.948, 4.95, 4.953, 4.955, 4.957, 4.959, 4.961, 4.963, 4.965, 4.967, 4.968, 4.97, 4.971, 4.973, 4.974, 4.975, 4.976, 4.978, 4.979, 4.98, 4.981, 4.982, 4.982, 4.983, 4.984, 4.985, 4.986] }, //Space Carrier
{ 'ID': 'X_SpaceAgeVenus_Landmark1', 'GoodCosts': 1500, //Flying Island
'FPProductions': [6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 13.54, 13.74, 13.95, 14.15, 14.36, 14.57, 14.77, 14.98, 15.19, 15.4, 15.61, 15.81, 16.02, 16.23, 16.44, 16.65, 16.86, 17.08, 17.28, 17.5, 17.71, 17.92, 18.13, 18.34, 18.55, 18.75, 18.96, 19.17, 19.37, 19.58, 19.79, 19.99, 20.19, 20.4, 20.6, 20.8, 21, 21.2, 21.4, 21.59, 21.79, 21.98, 22.17, 22.37, 22.56, 22.75, 22.93, 23.12, 23.3, 23.48, 23.67, 23.85, 24.02, 24.19, 24.37, 24.55, 24.71, 24.89, 25.05, 25.23, 25.39, 25.54, 25.71, 25.87, 26.03, 26.18, 26.33, 26.48, 26.64, 26.78, 26.93, 27.08, 27.22, 27.36, 27.5, 27.64, 27.77, 27.91, 28.04, 28.17, 28.3, 28.42, 28.54, 28.67, 28.79, 28.91, 29.03],
'GoodsProductions': [10.9, 11.09, 6.53, 6.78, 11.29, 6.53, 6.78, 11.29, 11.49, 6.53, 6.78, 11.29, 11.49, 11.69, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 13.54, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 13.54, 13.74, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 13.54, 13.74, 13.95, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31, 12.52, 12.73, 12.94, 13.14, 13.34, 13.54, 13.74, 13.95, 14.15, 6.53, 6.78, 11.29, 11.49, 11.69, 11.9, 12.1, 12.31],
'GoodsProductions1': [6.77, 6.88, 6.99, 7.09, 7.2, 7.32, 7.42, 7.54, 7.65, 7.76, 7.88, 7.99, 8.11, 8.22, 8.34, 8.46, 8.57, 8.69, 8.81, 8.92, 9.04, 9.16, 9.28, 9.4, 9.51, 9.63, 9.75, 9.87, 9.98, 10.1, 10.22, 10.34, 10.46, 10.57, 10.69, 10.81, 10.92, 11.04, 11.15, 11.27, 11.38, 11.49, 11.61, 11.72, 11.83, 11.95, 12.06, 12.17, 12.28, 12.38, 12.49, 12.6, 12.71, 12.81, 12.92, 13.02, 13.12, 13.23, 13.33, 13.43, 13.53, 13.63, 13.72, 13.82, 13.91, 14.01, 14.1, 14.19, 14.28, 14.37, 14.46, 14.55, 14.64, 14.73, 14.81, 14.89, 14.98, 15.06, 15.14, 15.22, 15.29, 15.37, 15.45, 15.52, 15.6, 15.67, 15.74, 15.82, 15.88, 15.95, 16.02, 16.09, 16.15, 16.22, 16.28, 16.34, 16.41, 16.47, 16.53, 16.58]},
{ 'ID': 'X_SpaceAgeTitan_Landmark1', 'GoodCosts': 2000, 'GoodsProductions': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 53, 57, 62, 66, 71, 76, 81, 86, 92, 98, 103, 109, 115, 122, 128, 135, 141, 148, 155, 162, 169, 176, 183, 190, 197, 205, 212, 219, 226, 233, 241, 248, 255, 262, 269, 276, 283, 290, 297, 304, 311, 317, 324, 331, 337, 344, 350, 357, 363, 369, 376, 382, 388, 394, 400, 406, 412, 418, 424, 430, 435, 441, 447, 453, 458, 464, 469, 475, 481, 486],
'AttackProductions': [4, 8, 12, 16, 20, 24, 28, 32, 36, 40], AttackIncrease: 4 }, //Saturn VI Gate CENTAURUS
{ 'ID': 'X_SpaceAgeTitan_Landmark2', 'GoodCosts': 2000, 'FPProductions': [2,4,6,8,10,12,14,16,18,20]}, //Saturn VI Gate PEGASUS
{ 'ID': 'X_SpaceAgeTitan_Landmark3', 'GoodCosts': 2000, 'AttackProductions': [3, 6, 9, 12, 15, 18, 21, 24, 27, 30], AttackIncrease: 3}, //Saturn VI Gate HYDRA
{ 'ID': 'X_SpaceAgeSpaceHub_Landmark1', 'GoodCosts': 30000, 'AttackProductions': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50], AttackIncrease: 5}, //Stellar Warship
],
BlueGalaxyStaticProductions: { // Durchschnitts FP und Güter pro Tag für großen Leuchtturm und Enzianwindmühle
'R_MultiAge_SummerBonus19a': { FP: 0.2, Goods: 1 },
'R_MultiAge_SummerBonus19b': { FP: 1.4, Goods: 2 },
'R_MultiAge_SummerBonus19c': { FP: 2.75, Goods: 3.75 },
'R_MultiAge_SummerBonus19d': { FP: 4, Goods: 5 },
'R_MultiAge_SummerBonus19e': { FP: 6.1, Goods: 7.5 },
'R_MultiAge_SummerBonus19f': { FP: 7.8, Goods: 10.5 },
'R_MultiAge_SummerBonus19g': { FP: 10, Goods: 16 },
'R_MultiAge_SummerBonus19h': { FP: 12.8, Goods: 20 },
'R_MultiAge_SoccerBonus22d': { FP: 0, Goods: 10.5},
'R_MultiAge_SoccerBonus22e': { FP: 3, Goods: 10.5},
'R_MultiAge_SoccerBonus22f': { FP: 5, Goods: 16 },
'R_MultiAge_SoccerBonus22g': { FP: 7, Goods: 16 },
'R_MultiAge_SoccerBonus22h': { FP: 11, Goods: 21.5 }
},
ForderBonus: 90,
RewardPerDay: 0,
FPPerTile: 0.2,
HideNewGBs: false,
ShowGoods: false,
GoodsValue0: 0.2,
GoodsValue1: 0.15,
GoodsValue3: 0.1,
ShowAttack: false,
AttackValue: 0.2,
GreatBuildingEntityCache: null,
FPRewards: 0,
EventDict: {},
GalaxyBuildings: [],
DetailsVisible: {},
/**
* Zeigt die Box an oder schließt sie
*/
Show: () => {
if ($('#greatbuildings').length === 0) {
let ForderBonus = localStorage.getItem('GreatBuildingsForderBonus');
if (ForderBonus !== null) {
GreatBuildings.ForderBonus = parseFloat(ForderBonus);
}
for (let i = 0; i < GreatBuildings.GreatBuildingsData.length; i++) {
let GoodCosts = localStorage.getItem('GreatBuildingsGoodCosts' + i);
if (GoodCosts !== null) {
GreatBuildings.GreatBuildingsData[i]['GoodCosts'] = parseFloat(GoodCosts);
}
}
let FPPerTile = localStorage.getItem('GreatBuildingsFPPerTile');
if (FPPerTile != null) {
GreatBuildings.FPPerTile = parseFloat(FPPerTile);
}
let ShowGoods = localStorage.getItem('GreatBuildingsShowGoods');
if (ShowGoods === 'true') {
GreatBuildings.ShowGoods = true;
}
let GoodsValue0 = localStorage.getItem('GreatBuildingsGoodsValue0');
if (GoodsValue0 !== null) {
GreatBuildings.GoodsValue0 = parseFloat(GoodsValue0);
}
let GoodsValue1 = localStorage.getItem('GreatBuildingsGoodsValue1');
if (GoodsValue1 !== null) {
GreatBuildings.GoodsValue1 = parseFloat(GoodsValue1);
}
let GoodsValue3 = localStorage.getItem('GreatBuildingsGoodsValue3');
if (GoodsValue3 !== null) {
GreatBuildings.GoodsValue3 = parseFloat(GoodsValue3);
}
let ShowAttack = localStorage.getItem('GreatBuildingsShowAttack');
if (ShowAttack === 'true') {
GreatBuildings.ShowAttack = true;
}
let AttackValue = localStorage.getItem('GreatBuildingsAttackValue');
if (AttackValue !== null) {
GreatBuildings.AttackValue = parseFloat(AttackValue);
}
GreatBuildings.RewardPerDay = MainParser.round(GreatBuildings.FPRewards / 6);
HTML.Box({
id: 'greatbuildings',
title: i18n('Boxes.GreatBuildings.Title'),
ask: i18n('Boxes.GreatBuildings.HelpLink'),
auto_close: true,
dragdrop: true,
minimize: true,
resize: true
});
// CSS in den DOM prügeln
HTML.AddCssFile('greatbuildings');
$('#greatbuildings').on('click', '.hidenewgbs', function () {
let $this = $(this),
id = $this.data('id'),
v = $this.prop('checked');
GreatBuildings.HideNewGBs = v;
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#costFactor', function () {
GreatBuildings.ForderBonus = parseFloat($('#costFactor').val());
if (isNaN(GreatBuildings.ForderBonus)) GreatBuildings.ForderBonus = 0;
localStorage.setItem('GreatBuildingsForderBonus', GreatBuildings.ForderBonus);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#fpPerTile', function () {
GreatBuildings.FPPerTile = parseFloat($('#fpPerTile').val());
if (isNaN(GreatBuildings.FPPerTile)) GreatBuildings.FPPerTile = 0;
localStorage.setItem('GreatBuildingsFPPerTile', GreatBuildings.FPPerTile);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#rewardPerDay', function () {
GreatBuildings.RewardPerDay = parseFloat($('#rewardPerDay').val());
if (isNaN(GreatBuildings.RewardPerDay)) GreatBuildings.RewardPerDay = 0;
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('click', '.showgoods', function () {
let $this = $(this),
id = $this.data('id'),
v = $this.prop('checked');
GreatBuildings.ShowGoods = v;
localStorage.setItem('GreatBuildingsShowGoods', GreatBuildings.ShowGoods);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#goodsValue0', function () {
GreatBuildings.GoodsValue0 = parseFloat($('#goodsValue0').val());
if (isNaN(GreatBuildings.GoodsValue0)) GreatBuildings.GoodsValue0 = 0;
localStorage.setItem('GreatBuildingsGoodsValue0', GreatBuildings.GoodsValue0);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#goodsValue1', function () {
GreatBuildings.GoodsValue1 = parseFloat($('#goodsValue1').val());
if (isNaN(GreatBuildings.GoodsValue1)) GreatBuildings.GoodsValue1 = 0;
localStorage.setItem('GreatBuildingsGoodsValue1', GreatBuildings.GoodsValue1);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#goodsValue3', function () {
GreatBuildings.GoodsValue3 = parseFloat($('#goodsValue3').val());
if (isNaN(GreatBuildings.GoodsValue3)) GreatBuildings.GoodsValue3 = 0;
localStorage.setItem('GreatBuildingsGoodsValue3', GreatBuildings.GoodsValue3);
GreatBuildings.CalcBody();
});
for (let i = 0; i < GreatBuildings.GreatBuildingsData.length; i++) {
$('#greatbuildings').on('blur', '#GreatBuildingsGoodCosts' + i, function () {
GreatBuildings.GreatBuildingsData[i].GoodCosts = parseFloat($('#GreatBuildingsGoodCosts' + i).val());
if (isNaN(GreatBuildings.GreatBuildingsData[i].GoodCosts)) GreatBuildings.GreatBuildingsData[i].GoodCosts = 0;
localStorage.setItem('GreatBuildingsGoodCosts' + i, GreatBuildings.GreatBuildingsData[i].GoodCosts);
GreatBuildings.CalcBody();
});
}
$('#greatbuildings').on('click', '.showattack', function () {
let $this = $(this),
id = $this.data('id'),
v = $this.prop('checked');
GreatBuildings.ShowAttack = v;
localStorage.setItem('GreatBuildingsShowAttack', GreatBuildings.ShowAttack);
GreatBuildings.CalcBody();
});
$('#greatbuildings').on('blur', '#attackValue', function () {
GreatBuildings.AttackValue = parseFloat($('#attackValue').val());
if (isNaN(GreatBuildings.AttackValue)) GreatBuildings.AttackValue = 0;
localStorage.setItem('GreatBuildingsAttackValue', GreatBuildings.AttackValue);
GreatBuildings.CalcBody();
});
// Weiter Level aufklappen
$('#greatbuildings').on('click', '.gbmainrow', function () {
let Index = $(this).data('value');
GreatBuildings.DetailsVisible[Index] = !GreatBuildings.DetailsVisible[Index];
$(this).toggleClass('active');
GreatBuildings.RefreshDetailsVisible(Index);
});
} else {
HTML.CloseOpenBox('greatbuildings');
}
GreatBuildings.CalcBody();
},
CalcBody: () => {
GreatBuildings.DetailsVisible = {};
let h = [];
h.push('<div class="text-center dark-bg header">');
h.push('<strong class="title">' + i18n('Boxes.GreatBuildings.SuggestionTitle') + '</strong><br>');
if (LastMapPlayerID !== ExtPlayerID) {
h.push('<strong class="player-name"><span>' + PlayerDict[LastMapPlayerID]['PlayerName'] + '</span></strong>');
}
h.push('<br><strong>')
h.push(i18n('Boxes.GreatBuildings.ArcBonus') + ' ');
h.push('</strong><input type="number" id="costFactor" step="0.1" min="12" max="200" value="' + GreatBuildings.ForderBonus + '">% ');
h.push('<br><br>')
h.push('<input id="HideNewGBs" class="hidenewgbs game-cursor" ' + (GreatBuildings.HideNewGBs ? 'checked' : '') + ' type="checkbox">');
h.push(i18n('Boxes.GreatBuildings.HideNewGBs'));
h.push('<br>');
h.push(i18n('Boxes.GreatBuildings.FPPerTile') + ' ');
h.push('<input type="number" id="fpPerTile" step="0.01" min="0" max="1000" value="' + GreatBuildings.FPPerTile + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTFPPerTile')) + '">');
h.push('<br>');
h.push(i18n('Boxes.GreatBuildings.RewardPerDay') + ' ');
h.push('<input type="number" id="rewardPerDay" step="1" min="0" max="1000000" value="' + GreatBuildings.RewardPerDay + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTRewardPerDay')) + '">');
h.push('<br><br>');
h.push('<input id="ShowGoods" class="showgoods game-cursor" ' + (GreatBuildings.ShowGoods ? 'checked' : '') + ' type="checkbox">');
h.push(i18n('Boxes.GreatBuildings.ShowGoods'));
h.push('<br>');
if (GreatBuildings.ShowGoods) { //Güterwert - Boxen ausblenden, wenn Güter deaktiviert
h.push(HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsValue'), { eraname: i18n('Eras.' + CurrentEraID) }) + ' ');
h.push('<input type="number" id="goodsValue0" step="0.01" min="0" max="1000" value="' + GreatBuildings.GoodsValue0 + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTGoodsValue')) + '">');
if (GreatBuildings.GoodsValue0 > 0) {
h.push('<small> (' + HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsPerFP'), { goods: Math.round(1 / GreatBuildings.GoodsValue0 * 100) / 100 }) + ')</small>')
}
h.push('<br>');
if (CurrentEraID >= 3) { //Ab Eisenzeit => Star Gazer liefert Bronzezeitgüter
h.push(HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsValue'), { eraname: i18n('Eras.' + (CurrentEraID - 1)) }) + ' ');
h.push('<input type="number" id="goodsValue1" step="0.01" min="0" max="1000" value="' + GreatBuildings.GoodsValue1 + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTGoodsValue')) + '">');
if (GreatBuildings.GoodsValue1 > 0) {
h.push('<small> (' + HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsPerFP'), { goods: Math.round(1 / GreatBuildings.GoodsValue1 * 100) / 100 }) + ')</small>')
}
h.push('<br>');
}
if (CurrentEraID >= 10) { //Ab Moderne => Unveredelte Güter
h.push(HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsValue'), { eraname: i18n('Eras.' + (CurrentEraID - 3)) }) + ' ');
h.push('<input type="number" id="goodsValue3" step="0.01" min="0" max="1000" value="' + GreatBuildings.GoodsValue3 + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTGoodsValue')) + '">');
if (GreatBuildings.GoodsValue3 > 0) {
h.push('<small> (' + HTML.i18nReplacer(i18n('Boxes.GreatBuildings.GoodsPerFP'), { goods: Math.round(1 / GreatBuildings.GoodsValue3 * 100) / 100 }) + ')</small>')
}
h.push('<br>');
}
}
h.push('<input id="ShowAttack" class="showattack game-cursor" ' + (GreatBuildings.ShowAttack ? 'checked' : '') + ' type="checkbox">');
h.push(i18n('Boxes.GreatBuildings.ShowAttack'));
h.push('<br>');
if (GreatBuildings.ShowAttack) { //Güterwert - Boxen ausblenden, wenn Güter deaktiviert
h.push(i18n('Boxes.GreatBuildings.AttackValue')) + ' ';
h.push('<input type="number" id="attackValue" step="0.01" min="0" max="1000" value="' + GreatBuildings.AttackValue + '" title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTAttackValue')) + '">');
if (GreatBuildings.AttackValue > 0) {
h.push('<small> (' + HTML.i18nReplacer(i18n('Boxes.GreatBuildings.AttackPerFP'), { percent: Math.round(1 / GreatBuildings.AttackValue * 100) / 100 }) + ')</small>')
}
h.push('<br>');
}
h.push('<br>');
h.push(i18n('Boxes.GreatBuildings.SuggestionDescription'));
h.push('</div>');
h.push('<table class="foe-table">');
h.push('<thead class="sticky">');
h.push('<tr>');
h.push('<th>' + i18n('Boxes.GreatBuildings.GreatBulding') + '</th>');
h.push('<th>' + i18n('Boxes.GreatBuildings.Level') + '</th>');
h.push('<th>' + i18n('Boxes.GreatBuildings.Costs') + '</th>');
h.push('<th>' + i18n('Boxes.GreatBuildings.DailyFP') + '</th>');
if (GreatBuildings.ShowGoods) h.push('<th>' + i18n('Boxes.GreatBuildings.DailyGoods') + '</th>');
if (GreatBuildings.ShowAttack) h.push('<th>' + i18n('Boxes.GreatBuildings.Attack') + '</th>');
h.push('<th>' + i18n('Boxes.GreatBuildings.BreakEven') + '</th>');
h.push('<th title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTGoodCostsColumn')) + '">' + i18n('Boxes.GreatBuildings.FPCostGoods') + '</th>');
h.push('</tr>');
h.push('</thead>');
let CurrentCityMapData = (LastMapPlayerID === ExtPlayerID ? MainParser.CityMapData : MainParser.OtherPlayerCityMapData);
let AllROIResults = [],
IsNewGBs = [];
for (let i = 0; i < GreatBuildings.GreatBuildingsData.length; i++) {
let GBData = GreatBuildings.GreatBuildingsData[i];
if (GBData.ID === 'X_OceanicFuture_Landmark3') {
if (LastMapPlayerID == ExtPlayerID) {
GreatBuildings.RefreshGalaxyBuildings();
}
else { // Keine Galaxy für andere Spieler weil keine FP Daten vorhanden sind
continue;
}
}
let CityEntity = MainParser.CityEntities[GBData.ID];
if (!CityEntity) continue; //Great building has been removed from the game => skip
let OwnGB = Object.values(CurrentCityMapData).find(obj => (obj['cityentity_id'] === GBData.ID));
let EraName = GreatBuildings.GetEraName(CityEntity['asset_id']);
let Era = Technologies.Eras[EraName];
let DoubleCollection = (GBData.ID !== 'X_FutureEra_Landmark1' && GBData.ID !== 'X_AllAge_Expedition' && GBData.ID !== 'X_SpaceAgeVenus_Landmark1');
let NettoCosts = [];
for (let j = 0; j < GreatBuildings.Rewards[Era].length; j++) {
let P1 = GreatBuildings.Rewards[Era][j];
P1 = (P1 !== undefined ? P1 : 0);
let Maezen = GreatBuildings.GetMaezen(P1, GreatBuildings.ForderBonus);
NettoCosts[j] = GreatBuildings.GetBruttoCosts(GBData.ID, j) - Maezen[0] - Maezen[1] - Maezen[2] - Maezen[3] - Maezen[4];
}
let FPProductions = [],
GoodsProductions = [],
GoodsValue = 0,
AttackProductions = [],
AttackValue = GreatBuildings.AttackValue;
for (let j = 0; j < GreatBuildings.Rewards[Era].length; j++) {
FPProductions[j] = 0;
GoodsProductions[j] = 0;
AttackProductions[j] = 0;
if (GBData.ID === 'X_VirtualFuture_Landmark2' || GBData.ID === 'X_SpaceAgeAsteroidBelt_Landmark1') {
FPProductions[j] = GBData.Rewards[j] * 18.5;
GoodsProductions[j] = GBData.Rewards[j] * 34.5;
}
else if (GBData.ID === 'X_OceanicFuture_Landmark3') { //Blue Galaxy
FPProductions[j] = GBData.Rewards[j];
GoodsProductions[j] = GBData.Rewards[j];
GoodsValue = GreatBuildings.GoodsValue0;
}
else if (GBData.ID === 'X_FutureEra_Landmark1') { // Arche
let arc = 1 + MainParser.ArkBonus / 100;
FPProductions[j] = GBData.Rewards[j] * GreatBuildings.RewardPerDay / arc;
}
else if (GBData.ID === 'X_AllAge_Expedition') { // Relikttempel
FPProductions[j] = GBData.FPProductions[j];
GoodsProductions[j] = GBData.GoodsProductions[j];
}
else if (GBData.ID === 'X_SpaceAgeMars_Landmark1') { // Star Gazer
GoodsProductions[j] = GBData.GoodsProductions[j];
}
else if (GBData.ID === 'X_SpaceAgeVenus_Landmark1') {
FPProductions[j] = GBData.FPProductions[j];
GoodsProductions[j] = GBData.GoodsProductions[j] + GBData.GoodsProductions1[j] * (GreatBuildings.GoodsValue0 / GreatBuildings.GoodsValue1);
}
else {
if (GBData.FPProductions) {
if (j < 10) {
FPProductions[j] = GBData.FPProductions[j];
}
else {
FPProductions[j] = Math.floor(GBData.FPProductions[9] * (j + 1) / 10);
}
}
if (GBData.GoodsProductions) {
if (j < 10) {
GoodsProductions[j] = GBData.GoodsProductions[j];
}
else {
GoodsProductions[j] = Math.floor(GBData.GoodsProductions[9] + Math.ceil((j - 9) * GBData.GoodsIncrease));
}
}
if (GBData.AttackProductions) {
if (GBData.ID === 'X_ArcticFuture_Landmark2') {
AttackProductions[j] = GBData.AttackProductions[j] * (100 + MainParser.BoostSums['att_boost_attacker']) / 100 / 2; //Assume critical hit of +50% damage equals +100% attack, No defense boost => /2
}
else {
if (j < 10) {
AttackProductions[j] = GBData.AttackProductions[j];
}
else {
AttackProductions[j] = GBData.AttackProductions[9] + (j - 9) * GBData.AttackIncrease;
}
}
}
}
if (GBData.ID === 'X_VirtualFuture_Landmark2' || GBData.ID === 'X_SpaceAgeAsteroidBelt_Landmark1' || GBData.ID === 'X_OceanicFuture_Landmark3' || GBData.ID === 'X_AllAge_Expedition' || GBData.ID === 'X_SpaceAgeVenus_Landmark1') { // Himeji, Freighter, Galaxy, Relics, Flying Island
GoodsValue = GreatBuildings.GoodsValue0;
}
else if (GBData.ID === 'X_SpaceAgeMars_Landmark1') { //Star Gazer
GoodsValue = GreatBuildings.GoodsValue1;
}
else { //Standard goods production
if (CurrentEraID >= 10) { //ModernEra or higher => unrefined goods
GoodsValue = GreatBuildings.GoodsValue3;
GoodsProductions[j] *= 2;
}
else {
GoodsValue = GreatBuildings.GoodsValue0;
}
}
}
if (!GreatBuildings.ShowGoods) GoodsValue = 0;
if (!GreatBuildings.ShowAttack) AttackValue = 0;
let SkipGB = true;
for (let j = 0; j < GreatBuildings.Rewards[Era].length; j++) { //Search for level with production
if (FPProductions[j] + GoodsProductions[j] * GoodsValue + AttackProductions[j] * AttackValue > 0) {
SkipGB = false;
break;
}
}
if (SkipGB) continue; //Nothing found => dont show GB
let Charges = GBData.ID === 'X_OceanicFuture_Landmark3' ? GBData.Charges : undefined;
let CurrentLevel = (OwnGB !== undefined ? OwnGB['level'] : -1);
let Size = CityEntity['length'] * CityEntity['width'];
let CurrentROIResult = GreatBuildings.GetROIValues(CurrentLevel, NettoCosts, FPProductions, GoodsProductions, GoodsValue, AttackProductions, AttackValue, Size * GreatBuildings.FPPerTile, GBData.GoodCosts, DoubleCollection, Charges);
let ROIResults = [CurrentROIResult];
while (CurrentROIResult['BestLevel'] < NettoCosts.length - 1) {
CurrentROIResult = GreatBuildings.GetROIValues(CurrentROIResult['BestLevel'] + 1, NettoCosts, FPProductions, GoodsProductions, GoodsValue, AttackProductions, AttackValue, Size * GreatBuildings.FPPerTile, GBData.GoodCosts, DoubleCollection, Charges)
if (CurrentROIResult.BestLevel) {
ROIResults.push(CurrentROIResult);
}
}
AllROIResults[i] = ROIResults;
IsNewGBs[i] = (CurrentLevel === -1);
}
let ROIResultMap = [];
for (let i = 0; i < GreatBuildings.GreatBuildingsData.length; i++) {
ROIResultMap[i] = { 'index': i, 'ROIResults': AllROIResults[i] };
}
ROIResultMap = ROIResultMap.sort(function (a, b) {
if (!a['ROIResults'] || !a['ROIResults'][0]) return 999999;
if (!b['ROIResults'] || !b['ROIResults'][0]) return -999999;
let Levela = a['ROIResults'][0]['BestLevel'],
Levelb = b['ROIResults'][0]['BestLevel'];
if (Levela === undefined) return 999999;
if (Levelb === undefined) return -999999;
return a['ROIResults'][0]['ROIValues'][Levela]['ROI'] - b['ROIResults'][0]['ROIValues'][Levelb]['ROI'];
});
for (let i = 0; i < GreatBuildings.GreatBuildingsData.length; i++) {
if (!ROIResultMap[i]['ROIResults'] || !ROIResultMap[i]['ROIResults'][0]) continue;
let Index = ROIResultMap[i]['index'],
GBData = GreatBuildings.GreatBuildingsData[Index],
FPValueSign = '',
GoodsValueSign = '',
AttackValueSign = '',
TotalValueSign = '';
if (GBData.ID === 'X_OceanicFuture_Landmark3') {
FPValueSign = 'Ø ';
TotalValueSign = 'Ø ';
}
else if (GBData.ID === 'X_VirtualFuture_Landmark2' || GBData.ID === 'X_SpaceAgeAsteroidBelt_Landmark1' || GBData.ID === 'X_AllAge_Expedition' || GBData.ID === 'X_SpaceAgeVenus_Landmark1') {
FPValueSign = 'Ø ';
GoodsValueSign = 'Ø ';
TotalValueSign = 'Ø ';
}
else if (GBData.ID === 'X_ArcticFuture_Landmark2') {
AttackValueSign = 'Ø ';
TotalValueSign = 'Ø ';
}
if (GreatBuildings.HideNewGBs && IsNewGBs[Index]) continue;
for (let j = 0; j < AllROIResults[Index].length; j++) {
let CurrentROIResult = AllROIResults[Index][j];
if (j === 0) {
if (AllROIResults[Index].length >= 1) {
h.push('<tr class="gbmainrow" data-value="' + Index + '">');
}
}
else {
h.push('<tr class="gbdetailsrow" data-value="' + Index + '" ' + (j === 0 || GreatBuildings.DetailsVisible[Index] ? '' : 'style="display:none;"') + '>');
}
if (CurrentROIResult['BestLevel'] !== undefined) {
let CurrentLevel = Math.max(CurrentROIResult['CurrentLevel'], 0);
BestLevel = CurrentROIResult['BestLevel'];
let Costs = CurrentROIResult['ROIValues'][BestLevel]['Costs'],
FPProduction = CurrentROIResult['ROIValues'][BestLevel]['FP'],
GoodsProduction = CurrentROIResult['ROIValues'][BestLevel]['Goods'],
GoodsValue = CurrentROIResult['GoodsValue'],
AttackProduction = CurrentROIResult['ROIValues'][BestLevel]['Attack'],
AttackValue = CurrentROIResult['AttackValue'],
BreakEven = CurrentROIResult['ROIValues'][BestLevel]['ROI'],
BreakEvenString = TotalValueSign + HTML.Format(MainParser.round(BreakEven)),
BreakEvenClass = (i === 0 && j === 0 ? 'text-success' : 'text-bright');
CostsTT = (IsNewGBs[Index] ? HTML.i18nReplacer(i18n('Boxes.GreatBuildings.NewGBCostsTT'), { 'goodcosts': CurrentROIResult['BuildCosts'] }) : ''),
FPProductionTT = (IsNewGBs[Index] ? HTML.i18nReplacer(i18n('Boxes.GreatBuildings.NewGBFPProductionTT'), { 'tiles': Math.round(CurrentROIResult['BuildDailyCosts'] / GreatBuildings.FPPerTile * 100)/100, 'fppertile': GreatBuildings.FPPerTile, 'opcost': Math.round(CurrentROIResult['BuildDailyCosts'] * 100)/ 100 }) : '');
let BreakEvenTT;
let HasGoodsProduction = (GoodsProduction * GoodsValue !== 0),
HasAttackProduction = (AttackProduction * AttackValue !== 0);
if (HasGoodsProduction && HasAttackProduction) { //FP + Goods + Attack
BreakEvenTT = HTML.i18nReplacer(i18n('Boxes.GreatBuildings.BreakEvenTTGoodsAttack'), { 'days': Math.round(BreakEven), 'costs': HTML.Format(Math.round(Costs)), 'fpproduction': Math.round(FPProduction * 10) / 10, 'goodsproduction': Math.round(GoodsProduction * 10) / 10, 'goodsvalue': GoodsValue, 'goodsproductionvalue': Math.round(GoodsProduction * GoodsValue * 10) / 10, 'attackproduction': Math.round(AttackProduction * 10) / 10, 'attackvalue': AttackValue, 'attackproductionvalue': Math.round(AttackProduction * AttackValue * 10) / 10 });
}
else if (HasGoodsProduction) { //FP + Goods
BreakEvenTT = HTML.i18nReplacer(i18n('Boxes.GreatBuildings.BreakEvenTTGoods'), { 'days': Math.round(BreakEven), 'costs': HTML.Format(Math.round(Costs)), 'fpproduction': Math.round(FPProduction * 10) / 10, 'goodsproduction': Math.round(GoodsProduction * 10) / 10, 'goodsvalue': GoodsValue, 'goodsproductionvalue': Math.round(GoodsProduction * GoodsValue * 10) / 10 });
}
else if (HasAttackProduction) { //FP + Attack
BreakEvenTT = HTML.i18nReplacer(i18n('Boxes.GreatBuildings.BreakEvenTTAttack'), { 'days': Math.round(BreakEven), 'costs': HTML.Format(Math.round(Costs)), 'fpproduction': Math.round(FPProduction * 10) / 10, 'attackproduction': Math.round(AttackProduction * 10) / 10, 'attackvalue': AttackValue, 'attackproductionvalue': Math.round(AttackProduction * AttackValue * 10) / 10 });
}
else { //FP only
BreakEvenTT = HTML.i18nReplacer(i18n('Boxes.GreatBuildings.BreakEvenTT'), { 'days': Math.round(BreakEven), 'costs': HTML.Format(Math.round(Costs)), 'fpproduction': Math.round(FPProduction * 10) / 10 });
}
h.push('<td>' + MainParser.CityEntities[GBData.ID]['name'] + '</td>');
h.push('<td style="white-space:nowrap">' + CurrentLevel + ' → ' + (BestLevel + 1) + '</td>');
h.push('<td title="' + HTML.i18nTooltip(CostsTT) + '">' + HTML.Format(MainParser.round(Costs)) + '</td>');
h.push('<td title="' + HTML.i18nTooltip(FPProductionTT) + '">' + FPValueSign + HTML.Format(MainParser.round(FPProduction * 10) / 10) + '</td>');
if (GreatBuildings.ShowGoods) h.push('<td>' + GoodsValueSign + HTML.Format(MainParser.round(GoodsProduction * 10) / 10) + '</td>');
if (GreatBuildings.ShowAttack) h.push('<td>' + AttackValueSign + HTML.Format(MainParser.round(AttackProduction * 10) / 10) + '</td>');
h.push('<td title="' + HTML.i18nTooltip(BreakEvenTT) + '"><strong class="' + BreakEvenClass + '">' + HTML.i18nReplacer(i18n('Boxes.GreatBuildings.BreakEvenUnit'), { 'days': BreakEvenString }) + '</strong></td>');
}
else { //LG zu hoch => Keine Daten mehr verfügbar oder Güterkosten zu hoch
h.push('<td>' + MainParser.CityEntities[GBData.ID]['name'] + '</td>');
h.push('<td>-</td>');
h.push('<td>-</td>');
h.push('<td>-</td>');
if (GreatBuildings.ShowGoods) h.push('<td>-</td>');
if (GreatBuildings.ShowAttack) h.push('<td>-</td>');
h.push('<td>-</td>');
}
if (j === 0) {
if (IsNewGBs[Index]) {
h.push('<td><input title="' + HTML.i18nTooltip(i18n('Boxes.GreatBuildings.TTGoodCosts')) + '" type="number" id="GreatBuildingsGoodCosts' + Index + '" step="1" min="0" max="999999" value="' + GBData.GoodCosts + '"></td>');
}
else {
h.push('<td class="text-center">-</td>');
}
}
else { //j>0
h.push('<td></td>')
}
h.push('</tr>');
}
}
h.push('</table');
$('#greatbuildingsBody').html(h.join(''));
},
RefreshGalaxyBuildings: () => {
GreatBuildings.GalaxyBuildings = [];
let CityMap = Object.values(MainParser.CityMapData);
for (let i = 0; i < CityMap.length; i++) {
let ID = CityMap[i]['id']
EntityID = CityMap[i]['cityentity_id'],
CityEntity = MainParser.CityEntities[EntityID];
if (CityEntity['type'] === 'main_building' || CityEntity['type'] === 'greatbuilding') continue;
if (GreatBuildings.BlueGalaxyStaticProductions[EntityID]) {
GreatBuildings.GalaxyBuildings.push({ ID: ID, FP: GreatBuildings.BlueGalaxyStaticProductions[EntityID]['FP'], Goods: GreatBuildings.BlueGalaxyStaticProductions[EntityID]['Goods'] });
}
else {
// todo: check what this does
let Production = Productions.readType(CityMap[i]);
let FP = 0,
GoodsSum = 0;
if (Production?.['motivatedproducts']) {
FP = Production['motivatedproducts']['strategy_points'];
if (!FP) FP = 0;
for (j = 0; j < GoodsList.length; j++) {
let GoodID = GoodsList[j]['id'];
if (Production['motivatedproducts'][GoodID]) {
GoodsSum += Production['motivatedproducts'][GoodID];
}
}
}
if (FP > 0 || GoodsSum > 0) {
GreatBuildings.GalaxyBuildings.push({ ID: ID, FP: FP, Goods: GoodsSum });
}
}
}
GreatBuildings.GalaxyBuildings = GreatBuildings.GalaxyBuildings.sort(function (a, b) {
return (b['FP'] + b['Goods'] * GreatBuildings.GoodsValue0) - (a['FP'] + a['Goods'] * GreatBuildings.GoodsValue0);
});
},
GetGalaxyProduction: (FPProductions, Charges, Level, IsDoubleCollection) => {
let StartIndex = 0;
if (IsDoubleCollection && Level > 1) {
StartIndex = Charges[Level - 1];
}
let FPSum = 0,
GoodsSum = 0;
for (let i = StartIndex; i < StartIndex + Charges[Level]; i++) {
if (i >= GreatBuildings.GalaxyBuildings.length) break; // Nicht genug Gebäude vorhanden
FPSum += GreatBuildings.GalaxyBuildings[i]['FP'];
GoodsSum += GreatBuildings.GalaxyBuildings[i]['Goods'];
}
return { FP: FPProductions[Level] * FPSum, Goods: FPProductions[Level] * GoodsSum};
},
GetROIValues: (Level, NettoCosts, FPProductions, GoodsProductions, GoodsValue, AttackProductions, AttackValue, BuildDailyCosts, BuildCosts, DoubleCollection, Charges) => {
let Ret = { 'CurrentLevel': Level, 'BestLevel': undefined, ROIValues: [], GoodsValue: GoodsValue, AttackValue: AttackValue, BuildDailyCosts: BuildDailyCosts, BuildCosts: BuildCosts };
let DoubleCollections = [];
if (Charges) {
for (let i = 0; i < 100; i++) {
DoubleCollections[i] = GreatBuildings.GetGalaxyProduction(FPProductions, Charges, Level, true)['FP'];
DoubleCollections[i] += GreatBuildings.GetGalaxyProduction(FPProductions, Charges, Level, true)['Goods'] * GoodsValue;
}
}
let StartFPProduction = 0,
StartGoodsProduction = 0,
StartAttackProduction = 0,
CurrentInvestment = 0;
if (Level === -1) {
StartFPProduction = BuildDailyCosts;
CurrentInvestment = BuildCosts;
}
else if (Level > 0) {
if (Charges) { // Blaue Galaxie
StartFPProduction = GreatBuildings.GetGalaxyProduction(FPProductions, Charges, Level - 1, false)['FP'];
StartGoodsProduction = GreatBuildings.GetGalaxyProduction(FPProductions, Charges, Level - 1, false)['Goods'];
}
else {
StartFPProduction = FPProductions[Level - 1];
StartGoodsProduction = GoodsProductions[Level - 1];
StartAttackProduction = AttackProductions[Level - 1];
}
}
let BestValue = 999999;
for (let i = Math.max(Level, 0); i < NettoCosts.length; i++) {
CurrentInvestment += NettoCosts[i];
if (DoubleCollection) {
if (Charges) { // Blaue Galaxie
CurrentInvestment -= GreatBuildings.GetGalaxyProduction(FPProductions, Charges, i, true)['FP'];
CurrentInvestment -= GreatBuildings.GetGalaxyProduction(FPProductions, Charges, i, true)['Goods'] * GoodsValue;
}
else {
CurrentInvestment -= FPProductions[i];
CurrentInvestment -= GoodsProductions[i] * GoodsValue;
//Keine Doppelernte bei Angriffsbonus
}
}
let CurrentFPProduction,
CurrentGoodsProduction,
CurrentAttackProduction = 0;
if (Charges) { // Blaue Galaxie
CurrentFPProduction = GreatBuildings.GetGalaxyProduction(FPProductions, Charges, i, false)['FP'];
CurrentGoodsProduction = GreatBuildings.GetGalaxyProduction(FPProductions, Charges, i, false)['Goods'];
}
else {
CurrentFPProduction = FPProductions[i];
CurrentGoodsProduction = GoodsProductions[i];
CurrentAttackProduction = AttackProductions[i];
}
Ret['ROIValues'][i] = { 'Costs': CurrentInvestment, 'FP': CurrentFPProduction - StartFPProduction, 'Goods': CurrentGoodsProduction - StartGoodsProduction, 'Attack': CurrentAttackProduction - StartAttackProduction, 'ROI': CurrentInvestment / ((CurrentFPProduction - StartFPProduction) + (CurrentGoodsProduction - StartGoodsProduction) * GoodsValue + (CurrentAttackProduction - StartAttackProduction) * AttackValue) };
if (CurrentFPProduction + CurrentGoodsProduction * GoodsValue + CurrentAttackProduction * AttackValue > StartFPProduction + StartGoodsProduction * GoodsValue + StartAttackProduction * AttackValue) {
if (Ret['ROIValues'][i]['ROI'] < BestValue) {
Ret['BestLevel'] = i;
BestValue = Ret['ROIValues'][i]['ROI'];
}
}
}
return Ret;
},
GetEraName: (EntityID) => {
let UnderScorePos = EntityID.indexOf('_');
let EraName = EntityID.substring(UnderScorePos + 1);
UnderScorePos = EraName.indexOf('_');
return EraName.substring(0, UnderScorePos);
},
GetBruttoCosts: (EntityID, Level) => {
let CityEntity = MainParser.CityEntities[EntityID];
if (Level < 10) {
return CityEntity['strategy_points_for_upgrade'][Level];
}
else {
return Math.ceil(CityEntity['strategy_points_for_upgrade'][9] * Math.pow(1.025, Level - 9));
}
},
GetLevel: (EntityID, TotalFP) => {
let CityEntity = MainParser.CityEntities[EntityID];
let Level10 = CityEntity['strategy_points_for_upgrade'][9];
if (TotalFP <= Level10) {
for (let i = 0; i < 10; i++) {
if (CityEntity['strategy_points_for_upgrade'][i] === TotalFP)
return (i + 1);
}
return undefined;
}
else {
let Factor = TotalFP / Level10;
return 10 + Math.round(Math.log(Factor) / Math.log(1.025));
}
},
GetMaezen: (P1, ArcBoni) => {
let Ret = [];
let arcs = [];
for (let i = 0; i < 5; i++) {
if (ArcBoni.length) { //Array
arcs[i] = 1 + (ArcBoni[i] / 100);
}
else {
arcs[i] = 1 + (ArcBoni / 100);
}
}
Ret[0] = P1;
for (let i = 1; i < 5; i++) {
Ret[i] = MainParser.round(Ret[i - 1] / (i + 1) / 5) * 5;
}
for (let i = 0; i < 5; i++) {
Ret[i] = MainParser.round(Ret[i] * arcs[i]);
}
return Ret;
},
HandleEventPage: (Events) => {
for (let i = 0; i < Events.length; i++) {
let Event = Events[i];
let ID = Event['id'];
if (GreatBuildings.EventDict[ID]) continue; //Event schon behandelt
GreatBuildings.EventDict[ID] = Event;
if (Event['type'] !== 'great_building_contribution') continue;
if (!GreatBuildings.GreatBuildingEntityCache) {
GreatBuildings.GreatBuildingEntityCache = Object.values(MainParser.CityEntities).filter(obj => (obj['strategy_points_for_upgrade'] !== undefined));
}
let Entity = GreatBuildings.GreatBuildingEntityCache.find(obj => (obj['name'] === Event['great_building_name']))
if (!Entity) continue;
let EraName = GreatBuildings.GetEraName(Entity['asset_id']),
Era = Technologies.Eras[EraName],
Rank = Event['rank'],
Level = Event['level'] - 1,
Reward = GreatBuildings.Rewards[Era][Level];
if (Rank > 5) continue;
let Maezen = GreatBuildings.GetMaezen(Reward, MainParser.ArkBonus);
let FPReward = Maezen[Rank - 1];
GreatBuildings.FPRewards += FPReward;
}
},
RefreshDetailsVisible: (Index) => {
$('#greatbuildings tr.gbdetailsrow').each(function () {
let Data = $(this).data()['value'];
if (Data !== Index) return;
if (GreatBuildings.DetailsVisible[Index]) {
$(this).show();
}
else {
$(this).hide();
}
});
},
};