Compare commits

...

145 Commits

Author SHA1 Message Date
Colin McLeod
3c8b1f7d6a Adding 2.5% discount 2015-12-18 01:05:49 -08:00
Colin McLeod
62d9749660 Adding agility/maneuverability to shipyard overview 2015-12-13 12:31:06 -08:00
Colin McLeod
7db185e635 Bumping version to 1.10.0 2015-12-13 12:20:56 -08:00
Colin McLeod
e69bdac75c Add Cobra MK IV, FdL power plant update, PV Hangar 2015-12-13 12:19:22 -08:00
Colin McLeod
231f7e9267 Add planetary vechile hanger support 2015-12-13 12:19:22 -08:00
Colin McLeod
2ef44e38b3 Merge pull request #123 from fawick/master
Fix typo in languages.js
2015-12-07 10:31:23 -08:00
Fabian Wickborn
d051829f98 Fix typo in languages.js 2015-12-07 19:16:00 +01:00
Colin McLeod
01e8e71b28 Updating data reference, bumping version to 1.9.4 2015-11-30 23:38:06 -08:00
Colin McLeod
14681aa9fa Update tests to include bulkheads 2015-11-30 22:56:28 -08:00
Colin McLeod
b93572b18d Merge pull request #120 from sf302/master
Heat Sink Launcher utility auto-fill
2015-11-19 16:28:51 -08:00
Kevin Chang
41c4b4243a Remove arg overloading in useUtility 2015-11-16 16:36:15 -08:00
Kevin Chang
f5127c2475 Typo fix 2015-11-16 15:37:55 -08:00
Kevin Chang
db4303d3c8 Add Heat Sink auto-fill given new SCB heat output 2015-11-16 15:35:36 -08:00
Colin McLeod
8bc100714f Fix Viper Mk4 data. Bumping version to 1.9.3 2015-11-14 12:04:55 -08:00
Colin McLeod
fabd370f4a Update serializer test fixtures 2015-11-14 10:59:15 -08:00
Colin McLeod
769c20154d Updating Hull Reinforcement packages. Bumping to 1.9.2 2015-11-14 10:48:47 -08:00
Colin McLeod
2b5edd75cb Fix keelback boost/speed. Bump to 1.9.1 2015-11-14 10:37:38 -08:00
Colin McLeod
1b56d39356 Update tests to support latest data changes 2015-11-14 00:15:59 -08:00
Colin McLeod
8d1d6d63ad Merge pull request #119 from sf302/master
Handle new Bi-Weave Shield Generator
2015-11-13 22:38:26 -08:00
Kevin Chang
a713105878 Handle new Bi-Weave Shield Generator 2015-11-13 16:54:00 -08:00
Colin McLeod
c527a62ce6 Tweak loader 2015-11-12 11:27:56 -08:00
Colin McLeod
16c76b2598 Added EDDB IDs to data. Updating submodule 2015-10-27 12:00:25 -07:00
Colin McLeod
ad134330c4 Fix common -> standard for outfitting page 2015-10-27 12:00:25 -07:00
Colin McLeod
05438daf48 Merge pull request #113 from richardbuckle/fix-112
#112 lower-case 'k' in 'kg/s'
2015-10-25 18:45:33 -08:00
Richard Buckle
afebf68cae #112 lower-case 'k' in 'kg/s' 2015-10-26 01:51:52 +00:00
Colin McLeod
ab4bdf355c Fix submodule reference 2015-10-23 09:44:42 -07:00
Colin McLeod
0f4abd6ace Updating data submodule reference 2015-10-23 09:18:53 -07:00
Colin McLeod
2901c978dc Use HTTPS instead of SSH for submodule 2015-10-23 09:10:01 -07:00
Colin McLeod
21e9dbc381 Adding data through submodule 2015-10-22 20:38:28 -07:00
Colin McLeod
b2ceafa89e removing data folder 2015-10-22 20:37:14 -07:00
Colin McLeod
d8633a8411 Rename common to standard for consistency 2015-10-22 20:19:56 -07:00
Colin McLeod
f4bf09eaab fix discount minus sign placement 2015-10-22 20:19:56 -07:00
Colin McLeod
f0c40aae34 Handle erroneous data better 2015-10-22 20:19:55 -07:00
Colin McLeod
90ed8ed198 error page fix 2015-10-22 20:19:55 -07:00
Colin McLeod
9af6a529dd Adding station icons 2015-10-22 20:19:55 -07:00
Colin McLeod
269dfbdc1d Merge pull request #107 from sf302/master
Reload costs refinements
2015-10-14 00:15:43 -07:00
Kevin Chang
d01cd24b0d Updated comment to reflect changes to fuel logic 2015-10-13 15:58:44 -07:00
Kevin Chang
93ac3b217f Clean up unnecessary fuel costs logic 2015-10-13 15:56:17 -07:00
Colin McLeod
a38d6cf839 Merge pull request #109 from Toxicat/patch-1
Correct bad translation
2015-10-13 13:32:29 -07:00
PanzerKadaver
bd656b46ef Correct bad translation
Correct error reported in #108
2015-10-13 22:29:48 +02:00
Kevin Chang
20cce4dcda More logical limpet ammo display, fuel tied to slider 2015-10-12 20:54:47 -07:00
Kevin Chang
d286dda07f Refinements, limpet ammo display added to reloads 2015-10-12 19:38:33 -07:00
Colin McLeod
45b6dabcd2 Bumping version to 1.8.3 2015-10-10 11:47:46 -07:00
Colin McLeod
d476c58a9c Workaround for UI-router bug for build with slash in the name. Fixes #105 2015-10-09 18:29:04 -07:00
Colin McLeod
e837bb68fb Bumping version to 1.8.2 2015-10-09 15:48:54 -07:00
Colin McLeod
e2adc7bdc4 Tweak AFMU for explorer build 2015-10-09 15:44:10 -07:00
Colin McLeod
22716517c5 Remove A-rated build type, now redundant 2015-10-09 15:23:59 -07:00
Colin McLeod
8b82965c12 Fix section quick-fit menu z-index / overlap 2015-10-09 15:23:43 -07:00
Colin McLeod
65cf975a35 Merge pull request #104 from sf302/master
Hull reinforcement auto-fill, hardpoint clobber behavior tweak
2015-10-09 15:09:10 -07:00
Kevin Chang
1c78fea48f Fix behavior for hull reinforcement max at 5D 2015-10-08 22:51:00 -07:00
Kevin Chang
08f49c8339 Fix SCB internal clobber 2015-10-08 19:29:46 -07:00
Kevin Chang
bed81d26b2 Alter auto-fill clobbering behavior for hardpoints 2015-10-08 19:20:17 -07:00
Kevin Chang
38b13fca27 Add armor autofill, prevent internal fill clobber 2015-10-08 18:06:01 -07:00
Colin McLeod
0869230b13 Fix to standard fit all class B. Closes #103 2015-10-08 15:32:01 -07:00
Colin McLeod
80d4b6b431 fix power bug when swapping disabled components 2015-10-07 20:34:52 -07:00
Colin McLeod
fb7e9136d4 Merge pull request #102 from sf302/master
Additional auto-fill for SCB and other weapons
2015-10-07 20:25:38 -07:00
Colin McLeod
059ff367ff Price changes for 1.4 2015-10-07 20:13:21 -07:00
Kevin Chang
d322e062ad Trimming back down to just laser/MC/cannon fills 2015-10-07 20:09:51 -07:00
Kevin Chang
f807f4222f Less hacks to get the same thing done 2015-10-07 20:06:04 -07:00
Kevin Chang
1d4b046723 Tweaked to reenable slot if previously disabled 2015-10-07 19:51:36 -07:00
Kevin Chang
b9fc114e02 Additional auto-fill for SCB and other weapons 2015-10-07 19:43:39 -07:00
Colin McLeod
50047411c3 Correct Viper boost speed 2015-10-07 17:57:22 -07:00
Colin McLeod
610ded2f83 Fix ammo sorting by qty and unit price 2015-10-07 11:35:36 -07:00
Colin McLeod
2a644e787a Merge pull request #100 from sf302/master
Added new 'Reload Costs' tab for ammo, digit display cleanup
2015-10-07 11:33:05 -07:00
Colin McLeod
90b339e5c3 Correct 50% warning on power band 2015-10-07 11:32:52 -07:00
Colin McLeod
a213ad12d0 lint fix 2015-10-07 02:17:49 -07:00
Colin McLeod
a4b8b942a1 Show warning when Power priority group 1 exceeds 50%. 2015-10-07 02:16:00 -07:00
Colin McLeod
df7ef0fbdb Adding more outiftting sub section menu options 2015-10-07 02:14:45 -07:00
Colin McLeod
f42dc481df Added Outfitting section sub-menu 2015-10-06 22:49:09 -07:00
Colin McLeod
623be748c0 New and improved shipyard/home page 2015-10-06 20:06:13 -07:00
Colin McLeod
35c84ee0f0 Handle rounding erros on priority bands 2015-10-06 20:06:13 -07:00
Colin McLeod
4d84f271be Update tests for ignore auto generated property 2015-10-06 20:06:13 -07:00
Colin McLeod
5458c548fb Detailed discover scanner does not use any power 2015-10-06 20:06:12 -07:00
Colin McLeod
a9be057fe8 Readbility changes for fsd, fuel tank, and ls data 2015-10-06 20:06:12 -07:00
Colin McLeod
564c228d41 Massive refactoring to Ship class 2015-10-06 20:06:12 -07:00
Colin McLeod
3f6875abb6 Add find lightest shield generator 2015-10-06 20:06:12 -07:00
Colin McLeod
a2aa829b45 Add/impromve find compoonent functions 2015-10-06 20:06:12 -07:00
Colin McLeod
08b6ec9e31 Add size map 2015-10-06 20:06:12 -07:00
Colin McLeod
ee99d33275 Bumping version to 1.8.0 2015-10-06 20:06:12 -07:00
Colin McLeod
7b9e8dbc7d Sort ships by actual name not file name 2015-10-06 20:06:12 -07:00
Colin McLeod
44f45e7e93 Handle comparison when build is missing. Closes #96 2015-10-06 20:06:12 -07:00
Colin McLeod
a49f7ec594 Handle special characters in build or comparison name. Closes #101 2015-10-06 20:06:12 -07:00
Colin McLeod
9ee12e4167 Rename DBS file 2015-10-06 20:06:11 -07:00
Kevin Chang
33ad7d909a Fix torpedo ammo cost data 2015-10-05 20:27:22 -07:00
Kevin Chang
e5e29dc6cb Cleaned up lint errors 2015-10-05 20:15:46 -07:00
Kevin Chang
34dd40bcbf Added new 'Reload Costs' tab for ammo, digit display cleanup 2015-10-05 20:08:36 -07:00
Colin McLeod
0e8e9f5cbc Merge pull request #97 from SmokyBird/patch-1
Update fr.js
2015-10-05 16:30:00 -07:00
SmokyBird
d39cbb3ef5 Update fr.js
Finally found the full French translation for the Hull Reinforcement.
2015-10-06 00:47:07 +02:00
Colin McLeod
5470b241f6 Merge pull request #94 from koreldan/master
Minor corrections
2015-09-28 09:24:49 -07:00
enrico
6507c22355 minor corrections 2015-09-27 15:36:11 +02:00
Enrico
96c2f4b3b6 Merge pull request #1 from cmmcleod/master
updating
2015-09-27 15:26:35 +02:00
Colin McLeod
b0c521246e Bumping version to 1.7.3 2015-09-22 11:53:08 -07:00
Colin McLeod
5c0616ad47 Display clip + ammo reserve more intelligently 2015-09-22 11:52:44 -07:00
Colin McLeod
523f37ccc1 Correct Torpedo Pylon ammo reserve 2015-09-22 11:52:13 -07:00
Colin McLeod
5e2768bbf6 Correct Pack-Hound cost 2015-09-22 11:51:56 -07:00
Colin McLeod
61b3e7d47d Corrected Federal Gunship hull cost 2015-09-22 11:51:25 -07:00
Colin McLeod
ed6fc32d76 Correct Shield Cell Bank recharge values 2015-09-22 11:50:00 -07:00
Colin McLeod
4c74675edd Bumping version to 1.7.2 2015-09-22 09:27:39 -07:00
Colin McLeod
d43ee25e71 Use full name for Advanced Plasma Accelerator 2015-09-22 09:27:19 -07:00
Colin McLeod
46f00e0bc7 Lint fixes 2015-09-22 09:14:47 -07:00
Colin McLeod
d3cea71e50 Bumping version to 1.7.1 2015-09-22 09:13:43 -07:00
Colin McLeod
0516a6f54d Use calculated boost speed in comparisons. Fixes #91 2015-09-22 09:13:21 -07:00
Colin McLeod
eb8373f8b4 Line chart UI tweaks 2015-09-22 01:43:54 -07:00
Colin McLeod
202bbbd357 Use power icons for power management 2015-09-22 00:43:55 -07:00
Colin McLeod
b9e404c4da Adding italian number format support 2015-09-21 23:44:24 -07:00
Colin McLeod
e16ce83c03 Adding Spanish support 2015-09-21 23:44:05 -07:00
Colin McLeod
83c266d083 Bumping version to 1.7.0 2015-09-21 21:43:56 -07:00
Colin McLeod
349b8f436c Import/export fixture fixes for FSD Interdictor 2015-09-21 21:43:17 -07:00
Colin McLeod
e9a0a01e14 Lint fixes 2015-09-21 21:42:48 -07:00
Colin McLeod
457b8920f2 Partial Italian translation 2015-09-21 21:00:29 -07:00
Colin McLeod
31b63e9a87 en.js formatting 2015-09-21 21:00:17 -07:00
Colin McLeod
8dc3725b47 Chart UI Tweaks 2015-09-21 20:58:13 -07:00
Colin McLeod
e2096ba9f4 Display calculate boost speed 2015-09-21 20:47:59 -07:00
Colin McLeod
231fcbb3bc Calculate top boost speed 2015-09-21 20:47:31 -07:00
Colin McLeod
75c22de166 Use true base boost speeds 2015-09-21 20:45:44 -07:00
Colin McLeod
d196127392 Improve Shield Cell bank readability 2015-09-20 10:56:39 -07:00
Colin McLeod
fb4dc906aa Empty Spanish translations for now 2015-09-20 10:56:18 -07:00
Colin McLeod
9937ba8039 Merge pull request #93 from koreldan/master
added italian language
2015-09-19 22:10:06 -07:00
enrico
d92722f1c2 added italian language 2015-09-20 01:13:07 +02:00
Colin McLeod
69096d7816 Merge pull request #92 from SmokyBird/patch-1
Update fr.js
2015-09-19 14:48:55 -07:00
SmokyBird
2846827959 Update fr.js
Changed a few translations to keep the real ones, coming from the game.
2015-09-19 14:50:53 +02:00
Colin McLeod
67bd56e692 Top speed display and test tweaks 2015-09-17 22:09:30 -07:00
Colin McLeod
95f5e8e5ae Bumping version to 1.6.0 2015-09-17 01:00:38 -07:00
Colin McLeod
eb52a7548c Improve multi series tooltips for line chart 2015-09-17 01:00:10 -07:00
Colin McLeod
b479b61926 Minor bar chart UI tweak 2015-09-17 00:59:29 -07:00
Colin McLeod
726a08b05b Calculate speed based on Thrusters. Closes #16 2015-09-17 00:59:09 -07:00
Colin McLeod
fc2f76c31c Updating ships and thrusters for speed calculation support 2015-09-17 00:57:31 -07:00
Colin McLeod
839e1a5cbd Removing unused icon 2015-09-17 00:55:26 -07:00
Colin McLeod
12beeffae0 Hack to component select. Closes #89 2015-09-14 10:45:06 -07:00
Colin McLeod
83ad7d9f6c Correct price of Federal Gunship 2015-09-07 12:43:52 -07:00
Colin McLeod
6e65d67f14 Bumping version to 1.5.5 2015-09-05 23:01:19 -07:00
Colin McLeod
a127e2f5a5 Merge pull request #85 from gbiobob/master
Corrections for French localisation
2015-09-05 11:01:13 -07:00
gbiobob
9154b7f38c Corrections for French localisation 2015-09-05 11:13:26 +02:00
Colin McLeod
c2d8cad249 Bumping version to 1.5.4 2015-09-04 17:31:08 -07:00
Colin McLeod
e9ffe5baec Fix to Russian language name 2015-09-04 17:30:41 -07:00
Colin McLeod
fffa325e83 Corrections to French translation 2015-09-04 12:45:14 -07:00
Colin McLeod
ed14ed2bb7 Bumping version to 1.5.2 2015-09-03 12:19:59 -07:00
Colin McLeod
7c9e020b88 Minor french translation correction 2015-09-03 12:10:21 -07:00
Colin McLeod
d711d1519b Correct base shield strength on fed assault and gun ship 2015-09-03 12:07:50 -07:00
Colin McLeod
3361f7e435 Another russian translation correction 2015-09-03 12:01:13 -07:00
Colin McLeod
3a79f99f77 Correct Russian translations 2015-09-03 11:58:29 -07:00
Colin McLeod
ff25b55c1f Lint fix 2015-09-03 00:22:50 -07:00
Colin McLeod
ae6f6b0da1 Bumping version to 1.5.1 2015-09-03 00:21:23 -07:00
Colin McLeod
6dc714371d Update Shield Strength calculation 2015-09-03 00:19:58 -07:00
Colin McLeod
5762b133e5 Fix Orca first interal compartment restrictions 2015-09-03 00:19:30 -07:00
126 changed files with 2097 additions and 7909 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "data"]
path = data
url = https://github.com/cmmcleod/coriolis-data.git

View File

@@ -23,12 +23,12 @@ See the [Developer's Guide](https://github.com/cmmcleod/coriolis/wiki/Developer'
### Ship and Component Database
See [Data wiki](https://github.com/cmmcleod/coriolis/wiki/Database) for details on structure, etc.
See the [Data wiki](https://github.com/cmmcleod/coriolis-data/wiki) for details on structure, etc.
## License
All Data and [associated JSON](https://github.com/cmmcleod/coriolis/tree/master/data) files are intellectual property and copyright of Frontier Developments plc ('Frontier', 'Frontier Developments') and are subject to their
All Data and [associated JSON](https://github.com/cmmcleod/coriolis-data) files are intellectual property and copyright of Frontier Developments plc ('Frontier', 'Frontier Developments') and are subject to their
[terms and conditions](https://www.frontierstore.net/terms-and-conditions/).
The code (Javascript, CSS, HTML, and SVG files only) specificially for Coriolis.io is released under the MIT License.

View File

@@ -1,3 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M10.063 26l1.8-6h8.274l1.8 6h3.551l-6-20h-6.976l-6 20h3.551zM14.863 10h2.274l1.8 6h-5.874l1.8-6z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 265 B

28
app/icons/eddb.svg Normal file
View File

@@ -0,0 +1,28 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" height="400" viewBox="0 0 90 32">
<g>
<path d="M19.1,25.2c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6v3.3c0,0.3-0.1,0.6-0.2,0.7
c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1H3.6c-0.3,0-0.6-0.1-0.7-0.2c-0.2-0.1-0.3-0.3-0.3-0.4
c-0.1-0.2-0.2-0.4-0.1-0.6V10.2c0-0.3,0.1-0.5,0.2-0.7C2.7,9.4,2.9,9.3,3,9.2C3.2,9.1,3.4,9,3.6,9h15.5c0.3,0,0.6,0.1,0.7,0.2
c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6V22c0,0.3-0.1,0.6-0.2,0.7c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1
h-6.8v-6.8c0.3-0.2,0.6-0.4,0.8-0.7c0.2-0.3,0.3-0.7,0.3-1c0-0.6-0.2-1.1-0.6-1.4c-0.4-0.4-0.9-0.6-1.4-0.6c-0.5,0-1,0.2-1.4,0.6
c-0.4,0.4-0.6,0.9-0.6,1.4c0,0.8,0.3,1.4,1,1.8v8.7H19.1z"/>
<path d="M24.6,29.7V10.2c0-0.2,0-0.4,0.1-0.6c0.1-0.1,0.2-0.3,0.3-0.4C25.3,9.1,25.5,9,25.8,9h5.5c0.2,0,0.4,0.1,0.6,0.2
c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.4,0.2,0.7v13.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4c0.4,0.4,0.9,0.6,1.4,0.6
c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V2.3c0-0.2,0-0.4,0.1-0.6
c0.1-0.1,0.2-0.3,0.3-0.4C35.2,1.1,35.4,1,35.8,1h5.5c0.2,0,0.4,0.1,0.6,0.2c0.1,0.1,0.3,0.2,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.7v27.4
c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.3-0.4,0.4c-0.2,0.1-0.4,0.2-0.7,0.2H25.8c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.3-0.2-0.4-0.3
C24.7,30.3,24.6,30,24.6,29.7z"/>
<path d="M46.9,29.7V10.2c0-0.2,0-0.4,0.1-0.6c0.1-0.1,0.2-0.3,0.3-0.4C47.5,9.1,47.7,9,48.1,9h5.5c0.2,0,0.4,0.1,0.6,0.2
c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.4,0.2,0.7v13.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4c0.4,0.4,0.9,0.6,1.4,0.6
c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V2.3c0-0.2,0-0.4,0.1-0.6
c0.1-0.1,0.2-0.3,0.3-0.4C57.4,1.1,57.7,1,58,1h5.5c0.2,0,0.4,0.1,0.6,0.2c0.1,0.1,0.3,0.2,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.7v27.4
c0,0.2-0.1,0.4-0.2,0.6c-0.1,0.1-0.2,0.3-0.4,0.4s-0.4,0.2-0.7,0.2H48.1c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.3-0.2-0.4-0.3
C46.9,30.3,46.9,30,46.9,29.7z"/>
<path d="M87,29.7c0,0.3-0.1,0.6-0.2,0.7c-0.1,0.2-0.3,0.3-0.4,0.3c-0.2,0.1-0.4,0.2-0.6,0.1H70.3c-0.3,0-0.6-0.1-0.7-0.2
s-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.1-0.6V2.3c0-0.3,0.1-0.6,0.2-0.7c0.1-0.2,0.3-0.3,0.4-0.4C69.9,1.1,70.1,1,70.3,1h5.5
c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4c0.1,0.2,0.2,0.4,0.2,0.6v21.2c-0.7,0.4-1,1-1,1.8c0,0.5,0.2,1,0.6,1.4
c0.4,0.4,0.8,0.6,1.4,0.6c0.6,0,1.1-0.2,1.4-0.6c0.4-0.4,0.6-0.9,0.6-1.4c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.8-0.7V10.2
c0-0.3,0.1-0.5,0.2-0.7c0.1-0.1,0.3-0.3,0.4-0.3C79.8,9.1,80,9,80.2,9h5.5c0.3,0,0.6,0.1,0.7,0.2c0.2,0.1,0.3,0.3,0.4,0.4
C87,9.8,87,10,87,10.2V29.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,6 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M18 23l3 3 10-10-10-10-3 3 7 7z"></path>
<path d="M14 9l-3-3-10 10 10 10 3-3-7-7z"></path>

Before

Width:  |  Height:  |  Size: 419 B

After

Width:  |  Height:  |  Size: 248 B

3
app/icons/equalizer.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024">
<path d="M448 128v-16c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576zM256 256v-128h128v128h-128zM832 432c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-576v128h576v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h192v-128h-192v-16zM640 576v-128h128v128h-128zM448 752c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v16h-192v128h192v16c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-16h576v-128h-576v-16zM256 896v-128h128v128h-128z"></path>
</svg>

After

Width:  |  Height:  |  Size: 646 B

View File

@@ -1,3 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="724" height="1024" viewBox="0 0 1024 1024">
<path d="M0 1024c128-384 463-1024 1024-1024-263 211-384 704-576 704s-192 0-192 0l-192 320h-64z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 218 B

View File

@@ -1,6 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<path d="M28 0h-28v32h32v-28l-4-4zM16 4h4v8h-4v-8zM28 28h-24v-24h2v10h18v-10h2.343l1.657 1.657v22.343z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 431 B

After

Width:  |  Height:  |  Size: 260 B

3
app/icons/no-power.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<path d="M437.020 74.98c-48.353-48.351-112.64-74.98-181.020-74.98s-132.667 26.629-181.020 74.98c-48.351 48.353-74.98 112.64-74.98 181.020s26.629 132.667 74.98 181.020c48.353 48.351 112.64 74.98 181.020 74.98s132.667-26.629 181.020-74.98c48.351-48.353 74.98-112.64 74.98-181.020s-26.629-132.667-74.98-181.020zM448 256c0 41.407-13.177 79.794-35.556 111.19l-267.633-267.634c31.396-22.379 69.782-35.556 111.189-35.556 105.869 0 192 86.131 192 192zM64 256c0-41.407 13.177-79.793 35.556-111.189l267.635 267.634c-31.397 22.378-69.784 35.555-111.191 35.555-105.869 0-192-86.131-192-192z"></path>
</svg>

After

Width:  |  Height:  |  Size: 697 B

3
app/icons/power.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<path d="M192 0l-192 256h192l-128 256 448-320h-256l192-192z"></path>
</svg>

After

Width:  |  Height:  |  Size: 178 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<rect x="73.001" y="94.017" width="53.997" height="11.945"/>
<path d="M10.324,185.445l89.217,14.348l0.458,0.077l89.677-14.43L200,99.998l-10.338-89.765L100,0.129L10.34,10.233 L-0.001,99.986L10.324,185.445z M193.206,99.986L100,191.108L6.795,99.986L100,8.868L193.206,99.986z M6.82,107.775l87.583,85.624 l-78.983-12.702L6.82,107.775z M184.583,180.692l-78.992,12.712l87.587-85.634L184.583,180.692z M193.745,92.746L105.26,6.245 l79.339,8.938L193.745,92.746z M15.41,15.185L94.736,6.25L6.255,92.751L15.41,15.185z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 642 B

View File

@@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M100.002,200C155.139,200,200,155.142,200,100.001c0-55.143-44.861-100.002-99.998-100.002 C44.86-0.001-0.002,44.857-0.002,100.001C-0.001,155.142,44.86,200,100.002,200z M100.002,5.574 c52.063,0,94.423,42.359,94.423,94.427c0,52.067-42.361,94.422-94.423,94.422c-52.07,0-94.428-42.358-94.428-94.422 C5.574,47.933,47.933,5.574,100.002,5.574z"/>
<path d="M100.002,148.557c26.771,0,48.558-21.783,48.558-48.555c0-26.771-21.786-48.556-48.558-48.556 c-26.777,0-48.557,21.782-48.557,48.556C51.446,126.778,73.225,148.557,100.002,148.557z M100.002,57.015 c23.699,0,42.986,19.283,42.986,42.986c0,23.7-19.282,42.987-42.986,42.987c-23.705,0-42.991-19.282-42.991-42.987 C57.011,76.298,76.302,57.015,100.002,57.015z"/>
<rect x="73.404" y="93.985" width="53.197" height="12.033"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 912 B

View File

@@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M100.002,200c55.138,0,99.996-44.861,99.996-100c0-55.141-44.858-100-99.996-100 C44.861,0-0.001,44.857-0.001,100C0,155.139,44.861,200,100.002,200z M100.002,194.424c-35.465,0-66.413-19.663-82.552-48.651 l44.426-23.388c7.704,13.067,21.888,21.884,38.127,21.884c16.054,0,30.096-8.621,37.853-21.446l44.441,23.389 C166.092,174.961,135.282,194.424,100.002,194.424z M100.002,61.306c21.335,0,38.691,17.356,38.691,38.694 c0,21.338-17.364,38.691-38.691,38.691c-21.339,0-38.696-17.354-38.696-38.691C61.307,78.662,78.663,61.306,100.002,61.306z M194.422,100c0,14.802-3.427,28.808-9.521,41.287l-44.447-23.4c2.433-5.477,3.812-11.521,3.812-17.89 c0-23.578-18.539-42.852-41.8-44.145V5.636C153.392,6.956,194.422,48.762,194.422,100z M96.895,5.655v50.233 C73.938,57.491,55.73,76.635,55.73,100c0,6.187,1.286,12.081,3.592,17.434l-44.455,23.402C8.911,128.472,5.571,114.619,5.571,100 C5.577,48.972,46.261,7.297,96.895,5.655z"/>
<rect x="73.403" y="93.983" width="53.196" height="12.032"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
<g>
<path d="M145.137,59.126h4.498v6.995h5.576V46.556h-5.576v6.994h-4.498V16.328h-5.574v57.667h-15.411v14.824h-7.63 v-14.58h-13.044v14.58h-8.295v-14.58H82.138v14.58h-6.573v-14.58H59.072v14.58h-6.573v-14.58H39.458v36.338h13.041V94.391h6.573 v16.186h16.493V94.391h6.573v16.186h13.044V94.391h8.295v16.186h13.044V94.391h7.63v40.457l17.634,17.637h13.185v31.182h5.577 V73.996H145.14v-14.87H145.137z M154.97,146.907h-10.871l-14.376-14.376V79.57h25.247V146.907z"/>
<rect fill="#999999" x="147.703" y="16.328" width="5.572" height="7.345"/>
<rect fill="#999999" x="131.295" y="16.328" width="5.577" height="7.345"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 744 B

View File

@@ -18,7 +18,6 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/images/logo/apple-touch-icon-precomposed.png">
<link rel="apple-touch-icon" href="/images/logo/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="180x180" href="/images/logo/apple-touch-icon-180x180.png">
<!-- iPhone, iPod Touch, portrait -->
<link href="/images/splash/320x460.png" media="(device-width: 320px) and (device-height: 480px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" rel="apple-touch-startup-image">
<!-- iPhone, iPod Touch, landscape -->

View File

@@ -1,6 +1,6 @@
angular.module('app', ['ui.router', 'ct.ui.router.extras.sticky', 'ui.sortable', 'shipyard', 'ngLodash', 'app.templates', 'pascalprecht.translate'])
.run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', 'Languages',
function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts, Languages) {
.run(['$rootScope', '$location', '$window', '$document', '$state', '$translate', 'localeFormat', 'Persist', 'Discounts', 'Languages', 'SizeMap',
function($rootScope, $location, $window, $doc, $state, $translate, localeFormat, Persist, Discounts, Languages, SizeMap) {
// App is running as a standalone web app on tablet/mobile
var isStandAlone;
// This was causing issues on Windows phones ($window.external was causing Angular js to throw an exception). Backup is to try this and set isStandAlone to false if this fails.
@@ -42,9 +42,8 @@ function($rootScope, $location, $window, $doc, $state, $translate, localeFormat,
// Global Reference variables
$rootScope.insurance = { opts: [{ name: 'standard', pct: 0.05 }, { name: 'alpha', pct: 0.025 }, { name: 'beta', pct: 0.0375 }] };
$rootScope.discounts = { opts: Discounts };
$rootScope.STATUS = ['', 'disabled', 'off', 'on'];
$rootScope.STATUS_CLASS = ['', 'disabled', 'warning', 'secondary-disabled'];
$rootScope.sizeRatio = Persist.getSizeRatio();
$rootScope.SZM = SizeMap;
$rootScope.title = 'Coriolis';
$rootScope.changeLanguage = function() {

View File

@@ -20,6 +20,11 @@ angular.module('app').controller('ComparisonController', ['lodash', '$rootScope'
$scope.addBuild = function(id, name, code) {
var data = Ships[id]; // Get ship properties
code = code ? code : Persist.builds[id][name]; // Retrieve build code if not passed
if (!code) { // No build found
return;
}
var b = new Ship(id, data.properties, data.slots); // Create a new Ship instance
Serializer.toShip(b, code); // Populate components from code
// Extend ship instance and add properties below

View File

@@ -9,7 +9,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
var textBuildRegex = new RegExp('^\\[([\\w \\-]+)\\]\n');
var lineRegex = new RegExp('^([\\dA-Z]{1,2}): (\\d)([A-I])[/]?([FGT])?([SD])? ([\\w\\- ]+)');
var mountMap = { 'H': 4, 'L': 3, 'M': 2, 'S': 1, 'U': 0 };
var commonMap = { 'RB': 0, 'TM': 1, 'FH': 2, 'EC': 3, 'PC': 4, 'SS': 5, 'FS': 6 };
var standardMap = { 'RB': 0, 'TM': 1, 'FH': 2, 'EC': 3, 'PC': 4, 'SS': 5, 'FS': 6 };
var bhMap = { 'lightweight alloy': 0, 'reinforced alloy': 1, 'military grade composite': 2, 'mirrored surface composite': 3, 'reactive surface composite': 4 };
function isEmptySlot(slot) {
@@ -26,8 +26,8 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
if (!shipData) {
throw '"' + shipId + '" is not a valid Ship Id!';
}
if (typeof name != 'string' || name.length < 3) {
throw shipData.properties.name + ' build "' + name + '" must be a string at least 3 characters long!';
if (typeof name != 'string' || name.length == 0) {
throw shipData.properties.name + ' build "' + name + '" must be a string at least 1 character long!';
}
if (typeof code != 'string' || code.length < 10) {
throw shipData.properties.name + ' build "' + name + '" is not valid!';
@@ -45,6 +45,10 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
throw 'Build Name missing!';
}
if (!detailedBuild.name.trim()) {
throw 'Build Name must be a string at least 1 character long!';
}
try {
ship = Serializer.fromDetailedBuild(detailedBuild);
} catch (e) {
@@ -133,7 +137,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
var name = parts[6].trim();
var slot, group;
if (isNaN(typeSize)) { // Common or Hardpoint
if (isNaN(typeSize)) { // Standard or Hardpoint
if (typeSize.length == 1) { // Hardpoint
var slotClass = mountMap[typeSize];
@@ -145,11 +149,11 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
group = _.find(GroupMap, equalsIgnoreCase, name);
var hpid = Components.findHardpointId(group, cl, rating, group ? null : name, mount, missile);
var hp = Components.findHardpoint(group, cl, rating, group ? null : name, mount, missile);
if (!hpid) { throw 'Unknown component: "' + line + '"'; }
if (!hp) { throw 'Unknown component: "' + line + '"'; }
ship.use(slot, hpid, Components.hardpoints(hpid), true);
ship.use(slot, hp.id, hp, true);
} else if (typeSize == 'BH') {
var bhId = bhMap[name.toLowerCase()];
@@ -158,12 +162,12 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
ship.useBulkhead(bhId, true);
} else if (commonMap[typeSize] != undefined) {
var commonIndex = commonMap[typeSize];
} else if (standardMap[typeSize] != undefined) {
var standardIndex = standardMap[typeSize];
if (ship.common[commonIndex].maxClass < cl) { throw name + ' exceeds max class for the ' + ship.name; }
if (ship.standard[standardIndex].maxClass < cl) { throw name + ' exceeds max class for the ' + ship.name; }
ship.use(ship.common[commonIndex], cl + rating, Components.common(commonIndex, cl + rating), true);
ship.use(ship.standard[standardIndex], cl + rating, Components.standard(standardIndex, cl + rating), true);
} else {
throw 'Unknown component: "' + line + '"';
@@ -177,11 +181,11 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
group = _.find(GroupMap, equalsIgnoreCase, name);
var intId = Components.findInternalId(group, cl, rating, group ? null : name);
var intComp = Components.findInternal(group, cl, rating, group ? null : name);
if (!intId) { throw 'Unknown component: "' + line + '"'; }
if (!intComp) { throw 'Unknown component: "' + line + '"'; }
ship.use(slot, intId, Components.internal(intId));
ship.use(slot, intComp.id, intComp);
}
}
@@ -213,7 +217,7 @@ angular.module('app').controller('ImportController', ['lodash', '$rootScope', '$
if (importData instanceof Array) { // Must be detailed export json
importDetailedArray(importData);
} else if (importData.ship && importData.name) { // Using JSON from a single ship build export
} else if (importData.ship && typeof importData.name !== undefined) { // Using JSON from a single ship build export
importDetailedArray([importData]); // Convert to array with singleobject
} else { // Using Backup JSON
importBackup(importData);

View File

@@ -12,22 +12,23 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
ship.buildWith(data.defaults); // Populate with default components
}
$scope.buildName = $p.bn;
$scope.buildName = $p.bn ? $window.decodeURIComponent($p.bn) : null;
$scope.ships = Ships;
$rootScope.title = ship.name + ($scope.buildName ? ' - ' + $scope.buildName : '');
$scope.ship = ship;
$scope.pp = ship.common[0]; // Power Plant
$scope.th = ship.common[1]; // Thruster
$scope.fsd = ship.common[2]; // Frame Shrift Drive
$scope.ls = ship.common[3]; // Life Support
$scope.pd = ship.common[4]; // Power Distributor
$scope.ss = ship.common[5]; // Sensors
$scope.ft = ship.common[6]; // Fuel Tank
$scope.pp = ship.standard[0]; // Power Plant
$scope.th = ship.standard[1]; // Thruster
$scope.fsd = ship.standard[2]; // Frame Shrift Drive
$scope.ls = ship.standard[3]; // Life Support
$scope.pd = ship.standard[4]; // Power Distributor
$scope.ss = ship.standard[5]; // Sensors
$scope.ft = ship.standard[6]; // Fuel Tank
$scope.hps = ship.hardpoints;
$scope.internal = ship.internal;
$scope.costList = ship.costList;
$scope.powerList = ship.powerList;
$scope.priorityBands = ship.priorityBands;
$scope.availCS = Components.forShip(ship.id);
$scope.availCS = ship.getAvailableComponents();
$scope.selectedSlot = null;
$scope.savedCode = Persist.getBuild(ship.id, $scope.buildName);
$scope.canSave = Persist.isEnabled();
@@ -39,6 +40,8 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.retroPredicate = 'netCost';
$scope.costDesc = true;
$scope.costPredicate = 'c.cost';
$scope.ammoDesc = true;
$scope.ammoPredicate = 'ammoUnitCost';
$scope.costTab = Persist.getCostTab() || 'costs';
if ($scope.savedCode) {
@@ -59,7 +62,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
yMax: ship.unladenRange,
yMin: 0,
func: function(cargo) { // X Axis is Cargo
return ship.jumpRangeWithMass(ship.unladenMass + $scope.fuel + cargo, $scope.fuel);
return ship.getJumpRangeForMass(ship.unladenMass + $scope.fuel + cargo, $scope.fuel);
}
};
$scope.jrChart = {
@@ -100,11 +103,12 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.speedSeries = {
xMin: 0,
xMax: ship.cargoCapacity,
yMax: 500,
yMax: calcSpeed(ship.unladenMass, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed).boost,
yMin: 0,
series: ['speed', 'boost'],
series: ['boost', '4 Pips', '2 Pips', '0 Pips'],
colors: ['#0088d2', '#ff8c0d', '#D26D00', '#c06400'],
func: function(cargo) { // X Axis is Cargo
return calcSpeed(ship.unladenMass + $scope.fuel + cargo, ship.speed, ship.boost, $scope.th.c);
return calcSpeed(ship.unladenMass + $scope.fuel + cargo, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed);
}
};
$scope.speedChart = {
@@ -162,7 +166,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
} else if (type == 'h') {
ship.use(slot, id, Components.hardpoints(id));
} else if (type == 'c') {
ship.use(slot, id, Components.common(ship.common.indexOf(slot), id));
ship.use(slot, id, Components.standard(ship.standard.indexOf(slot), id));
} else if (type == 'i') {
ship.use(slot, id, Components.internal(id));
} else if (type == 'b') {
@@ -183,25 +187,9 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
}
};
/**
* Strip ship to A-class and biggest A-class shield generator with military bulkheads
*/
$scope.aRatedBuild = function() {
for (var i = 0, l = ship.common.length - 1; i < l; i++) { // All except Fuel Tank
var id = ship.common[i].maxClass + 'A';
ship.use(ship.common[i], id, Components.common(i, id));
}
ship.hardpoints.forEach(function(slot) { ship.use(slot, null, null); });
ship.internal.forEach(function(slot) { ship.use(slot, null, null); });
ship.internal.some(function(slot) {
if (typeof slot.eligible === 'undefined') { // Assuming largest slot can hold an eligible shield
id = Components.findInternalId('Shield Generator', slot.maxClass, 'A');
ship.use(slot, id, Components.internal(id));
return true;
}
});
ship.useBulkhead(2);
updateState(Serializer.fromShip(ship));
$scope.resetBuild = function() {
ship.buildWith(data.defaults); // Populate with default components
updateState(null);
};
/**
@@ -209,21 +197,148 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
* without power management.
*/
$scope.optimizeMassBuild = function() {
var common = ship.common;
ship.hardpoints.forEach(function(slot) { ship.use(slot, null, null); });
ship.internal.forEach(function(slot) { ship.use(slot, null, null); });
ship.useBulkhead(0);
ship.use(common[2], common[2].maxClass + 'A', Components.common(2, common[2].maxClass + 'A')); // FSD
ship.use(common[3], common[3].maxClass + 'D', Components.common(3, common[3].maxClass + 'D')); // Life Support
ship.use(common[5], common[5].maxClass + 'D', Components.common(5, common[5].maxClass + 'D')); // Sensors
updateState(Serializer.fromShip(ship.optimizeMass()));
};
var pd = $scope.availCS.lightestPowerDist(ship.boostEnergy); // Find lightest Power Distributor that can still boost
ship.use(ship.common[4], pd, Components.common(4, pd));
var th = $scope.availCS.lightestThruster(ship.ladenMass); // Find lightest Thruster that still works for the ship at max mass
ship.use(ship.common[1], th, Components.common(1, th));
var pp = $scope.availCS.lightestPowerPlant(ship.powerRetracted); // Find lightest Power plant that can power the ship
ship.use(ship.common[0], pp, Components.common(0, pp));
/**
* Optimize for the lower mass build that can still boost and power the ship
* without power management.
*/
$scope.optimizeStandard = function() {
updateState(Serializer.fromShip(ship.useLightestStandard()));
};
$scope.useStandard = function(rating) {
updateState(Serializer.fromShip(ship.useStandard(rating)));
};
$scope.useHardpoint = function(group, mount, clobber, missile) {
updateState(Serializer.fromShip(ship.useWeapon(group, mount, clobber, missile)));
};
$scope.useUtility = function(group, rating, clobber) {
updateState(Serializer.fromShip(ship.useUtility(group, rating, clobber)));
};
$scope.emptyInternal = function() {
updateState(Serializer.fromShip(ship.emptyInternal()));
};
$scope.emptyHardpoints = function() {
updateState(Serializer.fromShip(ship.emptyWeapons()));
};
$scope.emptyUtility = function() {
updateState(Serializer.fromShip(ship.emptyUtility()));
};
$scope.fillWithCargo = function() {
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('cr', slot.maxClass, 'E');
if (!slot.c) {
ship.use(slot, id, Components.internal(id));
}
});
updateState(Serializer.fromShip(ship));
};
$scope.fillWithCells = function() {
var chargeCap = 0; // Capacity of single activation
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('scb', slot.maxClass, 'A');
if (!slot.c && (!slot.eligible || slot.eligible.scb)) { // Check eligibility because of Orca, don't overwrite generator
ship.use(slot, id, Components.internal(id));
chargeCap += Components.internal(id).recharge;
ship.setSlotEnabled(slot, chargeCap <= ship.shieldStrength); // Don't waste cell capacity on overcharge
}
});
updateState(Serializer.fromShip(ship));
};
$scope.fillWithArmor = function() {
ship.internal.forEach(function(slot) {
var hr = Components.findInternal('hr', Math.min(slot.maxClass, 5), 'D'); // Hull reinforcements top out at 5D
if (!slot.c && hr) {
ship.use(slot, hr.id, hr);
}
});
updateState(Serializer.fromShip(ship));
};
/**
* Fill all internal slots with Cargo Racks, and optmize internal components.
* Hardpoints are not altered.
*/
$scope.optimizeCargo = function() {
ship.internal.forEach(function(slot) {
var id = Components.findInternalId('cr', slot.maxClass, 'E');
ship.use(slot, id, Components.internal(id));
});
ship.useLightestStandard();
updateState(Serializer.fromShip(ship));
};
/**
* Optimize standard and internal components, hardpoints for exploration
*/
$scope.optimizeExplorer = function() {
var intLength = ship.internal.length,
heatSinkCount = 2, // Fit 2 heat sinks if possible
afmUnitCount = 2, // Fit 2 AFM Units if possible
sgSlot,
fuelScoopSlot,
sgId = $scope.availCS.lightestShieldGenerator(ship.hullMass),
sg = Components.internal(sgId);
ship.setSlotEnabled(ship.cargoHatch, false)
.use(ship.internal[--intLength], '2f', Components.internal('2f')) // Advanced Discovery Scanner
.use(ship.internal[--intLength], '2i', Components.internal('2i')); // Detailed Surface Scanner
for (var i = 0; i < intLength; i++) {
var slot = ship.internal[i];
var nextSlot = (i + 1) < intLength ? ship.internal[i + 1] : null;
if (!fuelScoopSlot && (!slot.eligible || slot.eligible.fs)) { // Fit best possible Fuel Scoop
var fuelScoopId = Components.findInternalId('fs', slot.maxClass, 'A');
fuelScoopSlot = slot;
ship.use(fuelScoopSlot, fuelScoopId, Components.internal(fuelScoopId));
ship.setSlotEnabled(fuelScoopSlot, true);
// Mount a Shield generator if possible AND an AFM Unit has been mounted already (Guarantees at least 1 AFM Unit)
} else if (!sgSlot && afmUnitCount < 2 && sg.class <= slot.maxClass && (!slot.eligible || slot.eligible.sg) && (!nextSlot || nextSlot.maxClass < sg.class)) {
sgSlot = slot;
ship.use(sgSlot, sgId, sg);
ship.setSlotEnabled(sgSlot, true);
} else if (afmUnitCount > 0 && (!slot.eligible || slot.eligible.am)) {
afmUnitCount--;
var am = Components.findInternal('am', slot.maxClass, afmUnitCount ? 'B' : 'A');
ship.use(slot, am.id, am);
ship.setSlotEnabled(slot, false); // Disabled power for AFM Unit
} else {
ship.use(slot, null, null);
}
}
ship.hardpoints.forEach(function(s) {
if (s.maxClass == 0 && heatSinkCount) { // Mount up to 2 heatsinks
ship.use(s, '02', Components.hardpoints('02'));
ship.setSlotEnabled(s, heatSinkCount == 2); // Only enable a single Heatsink
heatSinkCount--;
} else {
ship.use(s, null, null);
}
});
if (sgSlot) {
// The SG and Fuel scoop to not need to be powered at the same time
if (sgSlot.c.power > fuelScoopSlot.c.power) { // The Shield generator uses the most power
ship.setSlotEnabled(fuelScoopSlot, false);
} else { // The Fuel scoop uses the most power
ship.setSlotEnabled(sgSlot, false);
}
}
ship.useLightestStandard({ pd: '1D', ppRating: 'A' });
updateState(Serializer.fromShip(ship));
};
@@ -289,6 +404,15 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
ship.setCostIncluded(item, !item.incCost);
};
/**
* Toggle cost of the selected component for retrofitting comparison
* @param {object} item The component being toggled
*/
$scope.toggleRetrofitCost = function(item) {
retrofitShip.setCostIncluded(item, !item.incCost);
updateRetrofitCosts();
};
/**
* [sortCost description]
* @param {[type]} key [description]
@@ -305,8 +429,13 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
};
$scope.sortRetrofit = function(key) {
$scope.retroDesc = $scope.retroPredicate == key ? !$scope.retroDesc : $scope.retroDesc;
$scope.retroPredicate = key;
$scope.retroDesc = $scope.retroPredicate == key ? !$scope.retroDesc : $scope.retroDesc;
$scope.retroPredicate = key;
};
$scope.sortAmmo = function(key) {
$scope.ammoDesc = $scope.ammoPredicate == key ? !$scope.ammoDesc : $scope.ammoDesc;
$scope.ammoPredicate = key;
};
/**
@@ -332,6 +461,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.fuelChange = function(fuel) {
$scope.fuel = fuel;
updateAmmoCosts();
win.triggerHandler('render');
};
@@ -352,6 +482,19 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
updateRetrofitCosts();
};
$scope.updateCostTab = function(tab) {
Persist.setCostTab(tab);
$scope.costTab = tab;
};
$scope.ppWarning = function(pp) {
return pp.pGen < ship.powerRetracted;
};
$scope.pdWarning = function(pd) {
return pd.enginecapacity < ship.boostEnergy;
};
// Utilify functions
function updateState(code) {
@@ -360,6 +503,7 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
$scope.speedSeries.xMax = $scope.trSeries.xMax = $scope.jrSeries.xMax = ship.cargoCapacity;
$scope.jrSeries.yMax = ship.unladenRange;
$scope.trSeries.yMax = ship.unladenTotalRange;
$scope.speedSeries.yMax = calcSpeed(ship.unladenMass, ship.speed, ship.boost, $scope.th.c, ship.pipSpeed).boost;
updateRetrofitCosts();
win.triggerHandler('pwrchange');
}
@@ -374,18 +518,21 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
buyName: ship.bulkheads.c.name,
sellClassRating: retrofitShip.bulkheads.c.class + retrofitShip.bulkheads.c.rating,
sellName: retrofitShip.bulkheads.c.name,
netCost: ship.bulkheads.discountedCost - retrofitShip.bulkheads.discountedCost
netCost: ship.bulkheads.discountedCost - retrofitShip.bulkheads.discountedCost,
retroItem: retrofitShip.bulkheads
};
costs.push(item);
total += item.netCost;
if (retrofitShip.bulkheads.incCost) {
total += item.netCost;
}
}
for (var g in { common: 1, internal: 1, hardpoints: 1 }) {
for (var g in { standard: 1, internal: 1, hardpoints: 1 }) {
var retroSlotGroup = retrofitShip[g];
var slotGroup = ship[g];
for (i = 0, l = slotGroup.length; i < l; i++) {
if (slotGroup[i].id != retroSlotGroup[i].id) {
item = { netCost: 0 };
item = { netCost: 0, retroItem: retroSlotGroup[i] };
if (slotGroup[i].id) {
item.buyName = slotGroup[i].c.name || slotGroup[i].c.grp;
item.buyClassRating = slotGroup[i].c.class + slotGroup[i].c.rating;
@@ -397,25 +544,96 @@ angular.module('app').controller('OutfitController', ['$window', '$rootScope', '
item.netCost -= retroSlotGroup[i].discountedCost;
}
costs.push(item);
total += item.netCost;
if (retroSlotGroup[i].incCost) {
total += item.netCost;
}
}
}
}
$scope.retrofitTotal = total;
updateAmmoCosts();
}
$scope.updateCostTab = function(tab) {
Persist.setCostTab(tab);
$scope.costTab = tab;
};
function updateAmmoCosts() {
var costs = $scope.ammoList = [];
var total = 0, i, l, item, q, limpets = 0, srvs = 0, scoop = false;
$scope.ppWarning = function(pp) {
return pp.pGen < ship.powerRetracted;
};
for (var g in { standard: 1, internal: 1, hardpoints: 1 }) {
var slotGroup = ship[g];
for (i = 0, l = slotGroup.length; i < l; i++) {
if (slotGroup[i].id) {
//special cases needed for SCB, AFMU, and limpet controllers since they don't use standard ammo/clip
q = 0;
switch (slotGroup[i].c.grp) {
case 'fs': //skip fuel calculation if scoop present
scoop = true;
break;
case 'scb':
q = slotGroup[i].c.cells;
break;
case 'am':
q = slotGroup[i].c.ammo;
break;
case 'fx': case 'hb': case 'cc': case 'pc':
limpets = ship.cargoCapacity;
break;
case 'pv':
srvs += slotGroup[i].c.vehicles;
break;
default:
q = slotGroup[i].c.clip + slotGroup[i].c.ammo;
}
//calculate ammo costs only if a cost is specified
if (slotGroup[i].c.ammocost > 0) {
item = {
ammoClassRating: slotGroup[i].c.class + slotGroup[i].c.rating,
ammoName: slotGroup[i].c.name || slotGroup[i].c.grp,
ammoMax: q,
ammoUnitCost: slotGroup[i].c.ammocost,
ammoTotalCost: q * slotGroup[i].c.ammocost
};
costs.push(item);
total += item.ammoTotalCost;
}
}
}
}
$scope.pdWarning = function(pd) {
return pd.enginecapacity < ship.boostEnergy;
};
//limpets if controllers exist and cargo space available
if (srvs > 0) {
item = {
ammoName: 'SRVs',
ammoMax: srvs,
ammoUnitCost: 6005,
ammoTotalCost: srvs * 6005
};
costs.push(item);
total += item.ammoTotalCost;
}
//limpets if controllers exist and cargo space available
if (limpets > 0) {
item = {
ammoName: 'limpets',
ammoMax: ship.cargoCapacity,
ammoUnitCost: 101,
ammoTotalCost: ship.cargoCapacity * 101
};
costs.push(item);
total += item.ammoTotalCost;
}
//calculate refuel costs if no scoop present
if (!scoop) {
item = {
ammoName: 'fuel',
ammoMax: $scope.fuel,
ammoUnitCost: 50,
ammoTotalCost: $scope.fuel * 50
};
costs.push(item);
total += item.ammoTotalCost;
}
$scope.ammoTotal = total;
}
// Hide any open menu/slot/etc if the background is clicked
$scope.$on('close', function() {

View File

@@ -1,4 +1,59 @@
angular.module('app').controller('ShipyardController', ['$rootScope', 'ShipsDB', function($rootScope, ships) {
$rootScope.title = 'Coriolis';
$rootScope.ships = ships;
angular.module('app').controller('ShipyardController', ['$rootScope', '$scope', 'ShipsDB', 'Ship', 'Components', function($rootScope, $scope, ShipsDB, Ship, Components) {
$rootScope.title = 'Coriolis - Shipyard';
$scope.shipPredicate = 'properties.name';
$scope.shipDesc = false;
function countHp(slot) {
this.hp[slot.maxClass]++;
this.hpCount++;
}
function countInt(slot) {
var crEligible = !slot.eligible || slot.eligible.cr;
this.int[slot.maxClass - 1]++; // Subtract 1 since there is no Class 0 Internal compartment
this.intCount++;
this.maxCargo += crEligible ? Components.findInternal('cr', slot.maxClass, 'E').capacity : 0;
}
function shipSummary(shipId, shipData) {
var summary = angular.copy(shipData.properties);
var ship = new Ship(shipId, shipData.properties, shipData.slots);
summary.id = s;
summary.hpCount = 0;
summary.intCount = 0;
summary.maxCargo = 0;
summary.hp = [0, 0, 0, 0, 0]; // Utility, Small, Medium, Large, Huge
summary.int = [0, 0, 0, 0, 0, 0, 0, 0]; // Sizes 1 - 8
// Build Ship
ship.buildWith(shipData.defaults); // Populate with stock/default components
ship.hardpoints.forEach(countHp.bind(summary)); // Count Hardpoints by class
ship.internal.forEach(countInt.bind(summary)); // Count Internal Compartments by class
summary.retailCost = ship.totalCost; // Record Stock/Default/retail cost
ship.optimizeMass({ pd: '1D' }); // Optimize Mass with 1D PD for maximum possible jump range
summary.maxJumpRange = ship.unladenRange; // Record Jump Range
ship.optimizeMass({ th: ship.standard[1].maxClass + 'A' }); // Optmize mass with Max Thrusters
summary.topSpeed = ship.topSpeed;
summary.topBoost = ship.topBoost;
return summary;
}
/* Initialization */
if (!$rootScope.shipsOverview) { // Only generate this once
$rootScope.shipsOverview = [];
for (var s in ShipsDB) {
$scope.shipsOverview.push(shipSummary(s, ShipsDB[s]));
}
}
/**
* Sort ships
* @param {object} key Sort predicate
*/
$scope.sortShips = function(key) {
$scope.shipDesc = $scope.shipPredicate == key ? !$scope.shipDesc : $scope.shipDesc;
$scope.shipPredicate = key;
};
}]);

View File

@@ -6,12 +6,14 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop
function insertLinebreaks(d) {
var el = d3.select(this);
var words = d.split('\n');
var lines = d.split('\n');
el.text('').attr('y', -6);
for (var i = 0; i < words.length; i++) {
var tspan = el.append('tspan').text(words[i]);
for (var i = 0; i < lines.length; i++) {
var tspan = el.append('tspan').text(lines[i].length > 18 ? lines[i].substring(0, 15) + '...' : lines[i]);
if (i > 0) {
tspan.attr('x', -9).attr('dy', '1em');
} else {
tspan.attr('class', 'primary');
}
}
}
@@ -65,7 +67,7 @@ angular.module('app').directive('barChart', ['$window', '$translate', '$rootScop
var data = scope.data,
width = element[0].offsetWidth,
w = width - margin.left - margin.right,
height = 45 + (30 * data.length * $rootScope.sizeRatio),
height = 50 + (30 * data.length * $rootScope.sizeRatio),
h = height - margin.top - margin.bottom,
maxVal = d3.max(data, function(d) { return d3.max(properties, function(p) {return d[p]; }); });

View File

@@ -6,9 +6,9 @@ angular.module('app').directive('componentSelect', ['$translate', function($tran
var prevClass = null, prevRating = null;
for (var i = 0; i < opts.length; i++) {
var o = opts[i];
var id = o.id || (o.class + o.rating); // Common components' ID is their class and rating
var id = o.id || (o.class + o.rating); // Standard components' ID is their class and rating
if (i > 0 && opts.length > 4 && o.class != prevClass && (o.rating != prevRating || o.mode)) {
if (i > 0 && opts.length > 3 && o.class != prevClass && (o.rating != prevRating || o.mode) && o.grp != 'pa') {
list.push('<br/>');
}

View File

@@ -10,7 +10,7 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
scope.ships = ships;
scope.allBuilds = Persist.builds;
scope.buildsList = Object.keys(scope.allBuilds).sort();
scope.allComparisons = Persist.comparisons;
scope.allComparisons = Object.keys(Persist.comparisons).sort();
scope.bs = Persist.state;
var win = angular.element($window); // Angularized window object for event triggering
@@ -57,6 +57,10 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
});
};
scope.cleanedBuildList = function(shipId) {
return Object.keys(scope.allBuilds[shipId]);
};
scope.openMenu = function(e, menu) {
e.stopPropagation();
if (menu == scope.openedMenu) {
@@ -68,6 +72,11 @@ angular.module('app').directive('shipyardHeader', ['lodash', '$window', '$rootSc
scope.openedMenu = null;
return;
}
if (menu == 'comp') {
scope.allComparisons = Object.keys(Persist.comparisons).sort();
}
scope.openedMenu = menu;
};

View File

@@ -1,4 +1,7 @@
angular.module('app').directive('lineChart', ['$window', '$translate', '$rootScope', function($window, $translate, $rootScope) {
var RENDER_POINTS = 20; // Only render 20 points on the graph
return {
restrict: 'A',
scope: {
@@ -8,7 +11,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
link: function(scope, element) {
var seriesConfig = scope.series,
series = seriesConfig.series,
color = d3.scale.ordinal().range([ '#ff8c0d', '#1fb0ff', '#a05d56', '#d0743c']),
color = d3.scale.ordinal().range(scope.series.colors ? scope.series.colors : ['#ff8c0d']),
config = scope.config,
labels = config.labels,
margin = { top: 15, right: 15, bottom: 35, left: 60 },
@@ -39,20 +42,33 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
.attr('transform', 'rotate(-90)')
.attr('y', -50)
.attr('dy', '.1em')
.style('text-anchor', 'middle')
.text($translate.instant(labels.yAxis.title) + ' (' + $translate.instant(labels.yAxis.unit) + ')');
.style('text-anchor', 'middle');
// Create X Axis SVG Elements
var xLbl = vis.append('g').attr('class', 'x axis');
var xTxt = xLbl.append('text')
.attr('class', 'cap')
.attr('y', 30)
.attr('dy', '.1em')
.style('text-anchor', 'middle')
.text($translate.instant(labels.xAxis.title) + ' (' + $translate.instant(labels.xAxis.unit) + ')');
.style('text-anchor', 'middle');
// xTxt.append('tspan').attr('class', 'metric');
// yTxt.append('tspan').attr('class', 'metric');
// Create and Add tooltip
var tipWidth = (Math.max(labels.yAxis.unit.length, labels.xAxis.unit.length) * 1.25) + 2.5;
var tips = vis.append('g').style('display', 'none');
var tipHeight = 2 + (1.25 * (series ? series.length : 0.75));
var tips = vis.append('g').style('display', 'none').attr('class', 'tooltip');
var markers = vis.append('g').style('display', 'none');
tips.append('rect')
.attr('height', tipHeight + 'em')
.attr('y', (-tipHeight / 2) + 'em')
.attr('class', 'tip');
tips.append('text')
.attr('class', 'label x')
.attr('dy', (-tipHeight / 2) + 'em')
.attr('y', '1.25em');
var background = vis.append('rect') // Background to capture hover/drag
.attr('fill-opacity', 0)
@@ -84,7 +100,7 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
yMin = seriesConfig.yMin,
w = width - margin.left - margin.right,
h = height - margin.top - margin.bottom,
s, val, yVal, delta;
c, s, val, yVal, delta;
data.length = 0; // Reset Data array
@@ -105,12 +121,14 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
data[s].push( [ xMin, yVal[ series[s] ] ], [ 1, yVal[ series[s] ] ]);
}
} else {
delta = (xMax - xMin) / 30; // Only render 30 points on the graph
for (val = xMin; val <= xMax; val += delta) {
delta = (xMax - xMin) / RENDER_POINTS;
val = 0;
for (c = 0; c <= RENDER_POINTS; c++) {
yVal = func(val);
for (s = 0; s < series.length; s++) {
data[s].push([ val, yVal[ series[s] ] ]);
}
val += delta;
}
}
@@ -120,9 +138,11 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
yVal = func(xMin);
seriesData.push([ xMin, yVal ], [ 1, yVal ]);
} else {
delta = (xMax - xMin) / 30; // Only render 30 points on the graph
for (val = xMin; val <= xMax; val += delta) {
delta = (xMax - xMin) / RENDER_POINTS;
val = 0;
for (c = 0; c <= RENDER_POINTS; c++) {
seriesData.push([val, func(val) ]);
val += delta;
}
}
@@ -152,35 +172,63 @@ angular.module('app').directive('lineChart', ['$window', '$translate', '$rootSco
.attr('stroke-width', 2)
.attr('d', line);
var tip = tips.selectAll('g.tooltip').data(data).enter().append('g').attr('class', 'tooltip');
tip.append('rect').attr('width', tipWidth + 'em').attr('height', '2em').attr('x', '0.5em').attr('y', '-1em').attr('class', 'tip');
tip.append('circle').attr('class', 'marker').attr('r', 4);
tip.append('text').attr('class', 'label x').attr('y', '-0.25em');
tip.append('text').attr('class', 'label y').attr('y', '0.85em');
tips.selectAll('text.label.y').data(data).enter()
.append('text')
.attr('class', 'label y')
.attr('dy', (-tipHeight / 2) + 'em')
.attr('y', function(d, i) { return 1.25 * (i + 2) + 'em'; });
markers.selectAll('circle.marker').data(data).enter().append('circle').attr('class', 'marker').attr('r', 4);
}
function showTip() {
tips.style('display', null);
markers.style('display', null);
}
function hideTip() {
if (!dragging) {
tips.style('display', 'none');
markers.style('display', 'none');
}
}
function moveTip() {
var xPos = d3.mouse(this)[0], x0 = x.invert(xPos), y0 = func(x0), flip = (x0 / x.domain()[1] > 0.65);
var tip = tips.selectAll('g.tooltip').attr('transform', function(d, i) { return 'translate(' + x(x0) + ',' + y(series ? y0[series[i]] : y0) + ')'; });
tip.selectAll('rect').attr('x', flip ? (-tipWidth - 0.5) + 'em' : '0.5em').style('text-anchor', flip ? 'end' : 'start');
tip.selectAll('text.label').attr('x', flip ? '-1em' : '1em').style('text-anchor', flip ? 'end' : 'start');
tip.selectAll('text.label.x').text(fmtLong(x0) + ' ' + $translate.instant(labels.xAxis.unit));
tips.selectAll('text.label.y').text(function(d, i) { return fmtLong(series ? y0[series[i]] : y0) + ' ' + $translate.instant(labels.yAxis.unit); });
var xPos = d3.mouse(this)[0],
x0 = x.invert(xPos),
y0 = func(x0),
yTotal = 0,
flip = (x0 / x.domain()[1] > 0.65),
tipWidth = 0,
minTransY = (tips.selectAll('rect').node().getBoundingClientRect().height / 2) - margin.top;
tips.selectAll('text.label.y').text(function(d, i) {
var yVal = series ? y0[series[i]] : y0;
yTotal += yVal;
return (series ? $translate.instant(series[i]) : '') + ' ' + fmtLong(yVal);
}).append('tspan').attr('class', 'metric').text(' ' + $translate.instant(labels.yAxis.unit));
tips.selectAll('text').each(function() {
if (this.getBBox().width > tipWidth) {
tipWidth = Math.ceil(this.getBBox().width);
}
});
tipWidth += 8;
markers.selectAll('circle.marker').attr('cx', x(x0)).attr('cy', function(d, i) { return y(series ? y0[series[i]] : y0); });
tips.selectAll('text.label').attr('x', flip ? -12 : 12).style('text-anchor', flip ? 'end' : 'start');
tips.selectAll('text.label.x').text(fmtLong(x0)).append('tspan').attr('class', 'metric').text(' ' + $translate.instant(labels.xAxis.unit));
tips.attr('transform', 'translate(' + x(x0) + ',' + Math.max(minTransY, y(yTotal / (series ? series.length : 1))) + ')');
tips.selectAll('rect')
.attr('width', tipWidth + 4)
.attr('x', flip ? -tipWidth - 12 : 8)
.style('text-anchor', flip ? 'end' : 'start');
}
function updateFormats() {
xTxt.text($translate.instant(labels.xAxis.title) + ' (' + $translate.instant(labels.xAxis.unit) + ')');
yTxt.text($translate.instant(labels.yAxis.title) + ' (' + $translate.instant(labels.yAxis.unit) + ')');
xTxt.text($translate.instant(labels.xAxis.title)).append('tspan').attr('class', 'metric').text(' (' + $translate.instant(labels.xAxis.unit) + ')');
yTxt.text($translate.instant(labels.yAxis.title)).append('tspan').attr('class', 'metric').text(' (' + $translate.instant(labels.yAxis.unit) + ')');
fmtLong = $rootScope.localeFormat.numberFormat('.2f');
xAxis.tickFormat($rootScope.localeFormat.numberFormat('.2r'));
yAxis.tickFormat($rootScope.localeFormat.numberFormat('.3r'));

View File

@@ -38,7 +38,7 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
});
// Create Y Axis SVG Elements
vis.append('g').attr('class', 'watt axis');
var wattAxisGroup = vis.append('g').attr('class', 'watt axis');
vis.append('g').attr('class', 'pct axis');
var retText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp');
var depText = vis.append('text').attr('x', -3).style('text-anchor', 'end').attr('dy', '0.5em').attr('class', 'primary upp');
@@ -94,13 +94,24 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
retracted.selectAll('text').remove();
deployed.selectAll('rect').remove();
deployed.selectAll('text').remove();
wattAxisGroup.selectAll('line.threshold').remove();
// Update X & Y Axis
wattScale.range([0, w]).domain([0, maxPwr]).clamp(true);
pctScale.range([0, w]).domain([0, maxPwr / available]).clamp(true);
vis.selectAll('.watt.axis').call(wattAxis);
wattAxisGroup.call(wattAxis);
vis.selectAll('.pct.axis').attr('transform', 'translate(0,' + innerHeight + ')').call(pctAxis);
var pwrWarningClass = 'threshold' + (bands[0].retractedSum * 2 >= available ? ' exceeded' : '');
vis.select('.pct.axis g:nth-child(6)').selectAll('line, text').attr('class', pwrWarningClass);
wattAxisGroup.append('line')
.attr('x1', pctScale(0.5))
.attr('x2', pctScale(0.5))
.attr('y1', 0)
.attr('y2', innerHeight)
.attr('class', pwrWarningClass);
retText.attr('y', repY);
depText.attr('y', depY);
updateLabel(retLbl, w, repY, retBandsSelected, retBandsSelected ? retractedSum : maxBand.retractedSum, available);
@@ -162,7 +173,8 @@ angular.module('app').directive('powerBands', ['$window', '$translate', '$rootSc
}
function getClass(selected, sum, avail) {
return selected ? 'secondary' : (sum >= avail) ? 'warning' : 'primary';
// Round to avoid floating point precision errors
return selected ? 'secondary' : ((Math.round(sum * 100) / 100) >= avail) ? 'warning' : 'primary';
}
function bandText(val, index) {

View File

@@ -115,6 +115,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
laden: 'Beladen',
language: 'Sprache',
large: 'Groß',
limpets: 'Krallen',
ls: 'Lebenserhaltung',
'Lightweight Alloy': 'Leichte Legierung',
'lock factor': 'Massensperrefaktor',

View File

@@ -1,218 +1,219 @@
angular.module('app').config(['$translateProvider', function($translateProvider) {
$translateProvider
.translations('en', {
PHRASE_EXPORT_DESC: 'A detailed JSON export of your build for use in other sites and tools',
'A-Rated': 'A-Rated',
about: 'about',
action: 'action',
added: 'added',
Advanced: 'Advanced',
'Advanced Discovery Scanner': 'Advanced Discovery Scanner',
agility: 'agility',
alpha: 'alpha',
ammo: 'ammo',
PHRASE_CONFIRMATION: 'Are You Sure?',
armour: 'armour',
am: 'Auto Field-Maintenance Unit',
available: 'available',
backup: 'backup',
'Basic Discovery Scanner': 'Basic Discovery Scanner',
bl: 'Beam Laser',
beta: 'beta',
bins: 'bins',
boost: 'boost',
build: 'build',
'build name': 'Build Name',
builds: 'builds',
bh: 'bulkheads',
ul: 'Burst Laser',
buy: 'buy',
cancel: 'cancel',
c: 'Cannon',
capital: 'capital',
cargo: 'cargo',
'Cargo Hatch': 'Cargo Hatch',
cr: 'Cargo Rack',
cs: 'Cargo Scanner',
cells: 'cells',
'Chaff Launcher': 'Chaff Launcher',
close: 'close',
cc: 'Collector Limpet Controller',
compare: 'compare',
'compare all': 'compare all',
comparison: 'comparison',
comparisons: 'comparisons',
component: 'component',
cost: 'cost',
costs: 'costs',
cm: 'Countermeasure',
CR: 'CR',
create: 'create',
'create new': 'create new',
credits: 'credits',
Cytoscrambler: 'Cytoscrambler',
damage: 'damage',
delete: 'delete',
'delete all': 'delete all',
dep: 'dep',
deployed: 'deployed',
'detailed export': 'detailed export',
'Detailed Surface Scanner': 'Detailed Surface Scanner',
disabled: 'disabled',
discount: 'discount',
Distruptor: 'Distruptor',
dc: 'Docking Computer',
done: 'done',
DPS: 'DPS',
'edit data': 'edit data',
efficiency: 'efficiency',
'Electronic Countermeasure': 'Electronic Countermeasure',
empty: 'empty',
Enforcer: 'Enforcer',
ENG: 'ENG',
'enter name': 'Enter Name',
EPS: 'EPS',
export: 'export',
fixed: 'fixed',
forum: 'forum',
fc: 'Fragment Cannon',
fd: 'Frame Shift Drive',
ws: 'Frame Shift Wake Scanner',
FSD: 'FSD',
fi: 'FSD Interdictor',
fuel: 'fuel',
fs: 'Fuel Scoop',
ft: 'Fuel Tank',
fx: 'Fuel Transfer Limpet Controller',
'full tank': 'full tank',
Gimballed: 'Gimballed',
H: 'H',
hardpoints: 'hardpoints',
hb: 'Hatch Breaker Limpet Controller',
'Heat Sink Launcher': 'Heat Sink Launcher',
huge: 'huge',
hull: 'hull',
hr: 'Hull Reinforcement Package',
'Imperial Hammer': 'Imperial Hammer',
import: 'import',
'import all': 'import all',
insurance: 'insurance',
'Intermediate Discovery Scanner': 'Intermediate Discovery Scanner',
'internal compartments': 'internal compartments',
'jump range': 'jump range',
jumps: 'jumps',
kw: 'Kill Warrant Scanner',
L: 'L',
laden: 'laden',
language: 'language',
large: 'large',
ls: 'life support',
'Lightweight Alloy': 'Lightweight Alloy',
'lock factor': 'lock factor',
LS: 'Ls',
LY: 'LY',
M: 'M',
'm/s': 'm/s',
mass: 'mass',
max: 'max',
'max mass': 'max mass',
medium: 'medium',
'Military Grade Composite': 'Military Grade Composite',
nl: 'Mine Launcher',
'Mining Lance': 'Mining Lance',
ml: 'Mining Laser',
'Mirrored Surface Composite': 'Mirrored Surface Composite',
mr: 'Missile Rack',
mc: 'Multi-cannon',
'net cost': 'net cost',
no: 'no',
PHRASE_NO_BUILDS: 'No builds added to comparison!',
PHRASE_NO_RETROCH: 'No Retrofitting changes',
none: 'none',
'none created': 'none created',
off: 'off',
on: 'on',
optimal: 'optimal',
'optimal mass': 'optimal mass',
'optimize mass': 'optimize mass',
overwrite: 'overwrite',
Pacifier: 'Pacifier',
'Pack-Hound': 'Pack-Hound',
PHRASE_IMPORT: 'Paste JSON or import here',
pen: 'pen',
penetration: 'penetration',
permalink: 'permalink',
pa: 'Plasma Accelerator',
'Point Defence': 'Point Defence',
power: 'power',
pd: 'power distributor',
pp: 'power plant',
pri: 'pri',
priority: 'priority',
psg: 'Prismatic Shield Generator',
proceed: 'proceed',
pc: 'Prospector Limpet Controller',
pl: 'Pulse Laser',
PWR: 'PWR',
rg: 'Rail Gun',
range: 'range',
rate: 'rate',
'Reactive Surface Composite': 'Reactive Surface Composite',
recharge: 'recharge',
rf: 'Refinery',
'refuel time': 'refuel time',
'Reinforced Alloy': 'Reinforced Alloy',
reload: 'reload',
rename: 'rename',
repair: 'repair',
reset: 'reset',
ret: 'ret',
retracted: 'retracted',
'retrofit costs': 'retrofit costs',
'retrofit from': 'retrofit from',
ROF: 'ROF',
S: 'S',
save: 'save',
sc: 'scanner',
PHRASE_SELECT_BUILDS: 'Select Builds to Compare',
sell: 'sell',
s: 'sensors',
settings: 'settings',
sb: 'Shield Booster',
scb: 'Shield Cell Bank',
sg: 'Shield Generator',
shields: 'shields',
ship: 'ship',
ships: 'ships',
shortened: 'shortened',
size: 'size',
skip: 'skip',
small: 'small',
speed: 'speed',
standard: 'standard',
'Standard Docking Computer': 'Standard Docking Computer',
Stock: 'Stock',
SYS: 'SYS',
T: 'T',
T_LOAD: 't-load',
'The Retributor': 'The Retributor',
t: 'thrusters',
time: 'time',
tp: 'Torpedo Pylon',
total: 'total',
'total range': 'total range',
turret: 'turret',
type: 'type',
U: 'U',
unladen: 'unladen',
PHRASE_UPDATE_RDY: 'Update Available! Click to Refresh',
URL: 'URL',
utility: 'utility',
'utility mounts': 'utility mounts',
version: 'version',
WEP: 'WEP',
yes: 'yes',
PHRASE_BACKUP_DESC: 'Backup of all Coriolis data to save or transfer to another browser/device'
});
$translateProvider.translations('en', {
PHRASE_EXPORT_DESC: 'A detailed JSON export of your build for use in other sites and tools',
'A-Rated': 'A-Rated',
about: 'about',
action: 'action',
added: 'added',
Advanced: 'Advanced',
'Advanced Discovery Scanner': 'Advanced Discovery Scanner',
agility: 'agility',
alpha: 'alpha',
ammo: 'ammo',
PHRASE_CONFIRMATION: 'Are You Sure?',
armour: 'armour',
am: 'Auto Field-Maintenance Unit',
available: 'available',
backup: 'backup',
'Basic Discovery Scanner': 'Basic Discovery Scanner',
bl: 'Beam Laser',
beta: 'beta',
bins: 'bins',
boost: 'boost',
build: 'build',
'build name': 'Build Name',
builds: 'builds',
bh: 'bulkheads',
'bsg': 'Bi-Weave Shield Generator',
ul: 'Burst Laser',
buy: 'buy',
cancel: 'cancel',
c: 'Cannon',
capital: 'capital',
cargo: 'cargo',
'Cargo Hatch': 'Cargo Hatch',
cr: 'Cargo Rack',
cs: 'Cargo Scanner',
cells: 'cells',
'Chaff Launcher': 'Chaff Launcher',
close: 'close',
cc: 'Collector Limpet Controller',
compare: 'compare',
'compare all': 'compare all',
comparison: 'comparison',
comparisons: 'comparisons',
component: 'component',
cost: 'cost',
costs: 'costs',
cm: 'Countermeasure',
CR: 'CR',
create: 'create',
'create new': 'create new',
credits: 'credits',
Cytoscrambler: 'Cytoscrambler',
damage: 'damage',
delete: 'delete',
'delete all': 'delete all',
dep: 'dep',
deployed: 'deployed',
'detailed export': 'detailed export',
'Detailed Surface Scanner': 'Detailed Surface Scanner',
disabled: 'disabled',
discount: 'discount',
Distruptor: 'Distruptor',
dc: 'Docking Computer',
done: 'done',
DPS: 'DPS',
'edit data': 'edit data',
efficiency: 'efficiency',
'Electronic Countermeasure': 'Electronic Countermeasure',
empty: 'empty',
Enforcer: 'Enforcer',
ENG: 'ENG',
'enter name': 'Enter Name',
EPS: 'EPS',
export: 'export',
fixed: 'fixed',
forum: 'forum',
fc: 'Fragment Cannon',
fd: 'Frame Shift Drive',
ws: 'Frame Shift Wake Scanner',
FSD: 'FSD',
fi: 'FSD Interdictor',
fuel: 'fuel',
fs: 'Fuel Scoop',
ft: 'Fuel Tank',
fx: 'Fuel Transfer Limpet Controller',
'full tank': 'full tank',
Gimballed: 'Gimballed',
H: 'H',
hardpoints: 'hardpoints',
hb: 'Hatch Breaker Limpet Controller',
'Heat Sink Launcher': 'Heat Sink Launcher',
huge: 'huge',
hull: 'hull',
hr: 'Hull Reinforcement Package',
'Imperial Hammer': 'Imperial Hammer',
import: 'import',
'import all': 'import all',
insurance: 'insurance',
'Intermediate Discovery Scanner': 'Intermediate Discovery Scanner',
'internal compartments': 'internal compartments',
'jump range': 'jump range',
jumps: 'jumps',
kw: 'Kill Warrant Scanner',
L: 'L',
laden: 'laden',
language: 'language',
large: 'large',
'limpets': 'Limpets',
ls: 'life support',
'Lightweight Alloy': 'Lightweight Alloy',
'lock factor': 'lock factor',
LS: 'Ls',
LY: 'LY',
M: 'M',
'm/s': 'm/s',
mass: 'mass',
max: 'max',
'max mass': 'max mass',
medium: 'medium',
'Military Grade Composite': 'Military Grade Composite',
nl: 'Mine Launcher',
'Mining Lance': 'Mining Lance',
ml: 'Mining Laser',
'Mirrored Surface Composite': 'Mirrored Surface Composite',
mr: 'Missile Rack',
mc: 'Multi-cannon',
'net cost': 'net cost',
no: 'no',
PHRASE_NO_BUILDS: 'No builds added to comparison!',
PHRASE_NO_RETROCH: 'No Retrofitting changes',
none: 'none',
'none created': 'none created',
off: 'off',
on: 'on',
optimal: 'optimal',
'optimal mass': 'optimal mass',
'optimize mass': 'optimize mass',
overwrite: 'overwrite',
Pacifier: 'Pacifier',
'Pack-Hound': 'Pack-Hound',
PHRASE_IMPORT: 'Paste JSON or import here',
pen: 'pen',
penetration: 'penetration',
permalink: 'permalink',
pa: 'Plasma Accelerator',
'Point Defence': 'Point Defence',
power: 'power',
pd: 'power distributor',
pp: 'power plant',
pri: 'pri',
priority: 'priority',
psg: 'Prismatic Shield Generator',
proceed: 'proceed',
pc: 'Prospector Limpet Controller',
pl: 'Pulse Laser',
pv: 'Planetary Vehicle Hangar',
PWR: 'PWR',
rg: 'Rail Gun',
range: 'range',
rate: 'rate',
'Reactive Surface Composite': 'Reactive Surface Composite',
recharge: 'recharge',
rf: 'Refinery',
'refuel time': 'refuel time',
'Reinforced Alloy': 'Reinforced Alloy',
reload: 'reload',
rename: 'rename',
repair: 'repair',
reset: 'reset',
ret: 'ret',
retracted: 'retracted',
'retrofit costs': 'retrofit costs',
'retrofit from': 'retrofit from',
ROF: 'ROF',
S: 'S',
save: 'save',
sc: 'scanner',
PHRASE_SELECT_BUILDS: 'Select Builds to Compare',
sell: 'sell',
s: 'sensors',
settings: 'settings',
sb: 'Shield Booster',
scb: 'Shield Cell Bank',
sg: 'Shield Generator',
shields: 'shields',
ship: 'ship',
ships: 'ships',
shortened: 'shortened',
size: 'size',
skip: 'skip',
small: 'small',
speed: 'speed',
standard: 'standard',
'Standard Docking Computer': 'Standard Docking Computer',
Stock: 'Stock',
SYS: 'SYS',
T: 'T',
T_LOAD: 't-load',
'The Retributor': 'The Retributor',
t: 'thrusters',
time: 'time',
tp: 'Torpedo Pylon',
total: 'total',
'total range': 'total range',
turret: 'turret',
type: 'type',
U: 'U',
unladen: 'unladen',
PHRASE_UPDATE_RDY: 'Update Available! Click to Refresh',
URL: 'URL',
utility: 'utility',
'utility mounts': 'utility mounts',
version: 'version',
WEP: 'WEP',
yes: 'yes',
PHRASE_BACKUP_DESC: 'Backup of all Coriolis data to save or transfer to another browser/device'
});
}]);

View File

@@ -17,247 +17,196 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
});
$translateProvider.translations('es', {
PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools',
A_RATED: 'A-Klasse',
ABOUT: 'Über',
ACTION: 'Aktion',
ADDED: 'Hinzugefügt',
ADDER: 'Adder',
ADVANCED: 'Fortgeschritten',
'Advanced Discovery Scanner': 'Fortgeschrittener Aufklärungsscanner',
'Advanced Plasma Laser': 'Fortgeschrittener Plasma-Laser',
AGILITY: 'Beweglichkeit',
ALPHA: 'Alpha',
AMMO: 'Munition',
ANACONDA: 'Anaconda',
PHRASE_CONFIRMATION: 'Sind Sie sicher?',
ARMOUR: 'Panzerung',
ASP_EXPLORER: 'Asp Explorer',
am: 'Automatische Feldwartungseinheit',
AVAILABLE: 'Verfügbar',
BACKUP: 'Sicherungsdatei',
'Basic Discovery Scanner': 'Einfacher Aufklärungsscanner',
bl: 'Strahlenlaser',
BELUGA_LINER: 'Beluga Liner',
BETA: 'beta',
BINS: 'Behälter',
BOOST: 'Boost',
BUILD: 'Konfiguration',
BUILD_NAME: 'Konfigurationsname',
BUILDS: 'Konfigurationen',
BULKHEADS: 'Rumpfhüllenverstärkung',
ul: 'Salvenlaser',
BUY: 'Kaufen',
CANCEL: 'Abbrechen',
c: 'Kanone',
CAPITAL: 'kapital',
CARGO: 'Fracht',
CARGO_HATCH: 'Frachtluke',
cr: 'Frachtgestell',
cs: 'Frachtscanner',
CELLS: 'Zellen',
CHAFF_LAUNCHER: 'Düppel-Werfer',
CLOSE: 'Schließen',
COBRA_MK_III: 'Cobra MK III',
COBRA_MK_IV: 'Cobra MK IV',
cc: 'Krallensteuerung: Sammler',
COMPARE: 'Vergleichen',
COMPARE_ALL: 'Alles Vergleichen',
COMPARISON: 'Vergleich',
COMPARISONS: 'Vergleiche',
COMPONENT: 'Komponente',
COST: 'Kostet',
COSTS: 'Kosten',
cm: 'Gegenmaßnahme',
CR: 'CR',
CREATE: 'Erstellen',
CREATE_NEW: 'Neu Erstellen',
CREDITS: 'Credits',
Cytoscrambler: 'Zytostreuer',
DAMAGE: 'Schaden',
DELETE: 'Löschen',
DELETE_ALL: 'Alles Löschen',
DEP: 'Ausg',
DEPLOYED: 'Ausgefahren',
DETAILED_EXPORT: 'Detailiertes Exportieren',
'Detailed Surface Scanner': 'Detailoberflächenscanner',
DIAMONDBACK_EXPLORER: 'Diamondback-Erkunder',
DIAMONDBACK_SCOUT: 'Diamondback-Aufklärer',
DISABLED: 'Deaktiviert',
DISCOUNT: 'Rabatt',
Distruptor: 'Disruptor',
dc: 'Standard-Landecomputer',
DOLPHIN: 'Dolphin',
DONE: 'Fertig',
DPS: 'DPS',
EAGLE: 'Eagle',
EDIT_DATA: 'Bearbeiten',
EFFICIENCY: 'Effizienz',
'Electronic Countermeasure': 'Elektronische Gegenmaßnahme',
EMPTY: 'leer',
ENFORCER: 'Vollstrecker',
ENG: 'FAH',
PHRASE_ENTER_BUILD_NAME: '',
EPS: 'en/s',
EXPORT: 'Exportieren',
FEDERAL_CORVETTE: 'Föderale Korvette',
FEDERAL_DROPSHIP: 'Föderales Abwurfschiff',
FEDERAL_DROPSHIP_MK_II: 'Föderales Abwurfschiff Mk II',
FEDERAL_GUNSHIP: 'Föderales Kanonenschiff',
FER_DE_LANCE: 'Fer-de-Lance',
FIXED: '',
FORUM: 'Forum',
fc: 'Splitterkanone',
fd: 'Frameshift-Antrieb',
ws: 'Sogwolkenscanner',
FSD: 'FSA',
fi: 'FSA-Unterbrecher',
FUEL: 'Treibstoff',
fs: 'Treibstoffsammler',
ft: 'Treibstofftank',
fx: 'Krallensteuerung Treibstoffstransfer',
FULL_TANK: 'Tank voll',
GIMBALLED: 'Kardianisch',
H: 'H',
HARDPOINTS: 'Waffenaufhängungen',
hb: 'Krallen-Steuereinheit (Ladelukenöffner)',
HAULER: 'Hauler',
'Heat Sink Launcher': 'Kühlkörperwerfer',
HUGE: 'Riesig',
HULL: 'Hülle',
hr: 'Rumpfhüllenverstärkung (Paket)',
IMPERIAL_CLIPPER: 'Imperialer Clipper',
IMPERIAL_COURIER: 'Imperialer Kurier',
IMPERIAL_CUTTER: 'Imperialer Cutter',
IMPERIAL_EAGLE: 'Imperialer Eagle',
IMPERIAL_HAMMER: 'Imperialer Hammer',
IMPORT: 'Importieren',
IMPORT_ALL: 'Alles Importieren',
INSURANCE: 'Versicherung',
'Intermediate Discover Scanner': 'Mittlerer Aufklärungsscanner',
INTERNAL_COMPARTMENTS: 'Innenbereichkabine',
JUMP_RANGE: 'Sprungreichweite',
JUMPS: 'Sprünge',
kw: 'Tötungsbefehlscanner',
KRAIT: 'Krait',
L: 'L',
LADEN: 'Beladen',
LANGUAGE: 'Sprache',
LARGE: 'Groß',
ls: 'Lebenserhaltung',
'Lightweight Alloy': 'Leichte Legierung',
LOCK_FACTOR: 'Massensperrefaktor',
LS: 'LS',
LY: 'LJ',
M: 'M',
'm/s': 'M/Sec.',
MASS: 'Masse',
MAX: 'max',
MAX_MASS: 'maximale Masse',
MEDIUM: 'Mittel',
'Military Grade Composite': 'Militär-Komposit',
nl: 'Minenwerfer',
'Mining Lance': 'Lanzenabbaulaser',
ml: 'Abbaulaser',
'Mirrored Surface Composite': 'Gespiegelte-Oberfläche-Komposit',
mr: 'Raketenbatterie',
mc: 'Mehrfachgeschütz',
NET_COST: 'Nettokosten',
NO: 'Nein',
NO_RETROFITTING_CHANGES: 'Keine Umrüständerungen',
NONE: 'Nichts',
NONE_CREATED: 'Nichts erstellt',
OFF: 'Aus',
ON: 'An',
OPTIMAL: 'optimal',
OPTIMAL_MASS: 'optimale Masse',
OPTIMIZE_MASS: 'Masse optimieren',
ORCA: 'Orca',
OVERWRITE: 'Überschreiben',
Pacifier: 'Friedensstifter',
'Pack-Hound': 'Schwarmwerfer',
PANTHER_CLIPPER: 'Panter Clipper',
PHRASE_IMPORT: 'JSON hier einfügen oder hier importieren',
PEN: 'Durchdr',
PENETRATION: 'Durchdringung',
PERMALINK: 'Permalink',
pa: 'Plasmabeschleuniger',
POINT_DEFENCE: 'Punktverteidigung',
POWER: 'Energie',
pd: 'Energieverteiler',
pp: 'Kraftwerk',
PRI: 'Prio',
PRIORITY: 'Priorität',
psg: 'Prismaschildgenerator',
PROCEED: 'Fortfahren',
pc: 'Krallensteuerung: Erzsucher',
pl: 'Impulslaser',
PWR: 'En',
PYTHON: 'Python',
rg: 'Schienenkanone',
RANGE: 'Reichweite',
RATE: 'Rate',
'Reactive Surface Composite': 'Reaktive-Oberfläche-Komposit',
RECHARGE: 'Aufladen',
rf: 'Raffinerie',
REFUEL_TIME: 'Auftankzeit',
'Reinforced Alloy': 'Verstärkte Legierungen',
RELOAD: 'Aktualisieren',
RENAME: 'Umbenennen',
REPAIR: 'Reparieren',
RESET: 'Zurücksetzen',
RET: 'eing',
RETRACTED: 'Eingefahren',
RETROFIT_COSTS: 'Nachrüstkosten',
RETROFIT_FROM: 'Nachrüsten von',
ROF: 'Kad',
S: 'S',
SAVE: 'Speichern',
sc: 'Scanner',
PHRASE_SELECT_BUILDS: 'Wähle Konfigurationen zum Vergleichen',
SELL: 'Verkaufen',
s: 'Sensoren',
SETTINGS: 'Konfiguration',
sb: 'Schildverstärker',
scb: 'Schildzellenbank',
sg: 'Schildgenerator',
SHIELDS: 'Schilde',
SHIP: 'Schiff',
SHIPS: 'Schiffe',
SHORTENED: 'Gekürzt',
SIDEWINDER: 'Sidewinder',
SIZE: 'Größe',
SKIP: 'Überspringen',
SMALL: 'S',
SPEED: 'Geschwindigkeit',
STANDARD: 'Standard',
STANDARD_DOCKING_COMPUTER: 'Landecomputer',
STOCK: 'Standard',
SYS: 'SYS',
T: 'T',
T_LOAD: 'T-Lad',
THE_HUNTER: 'The Hunter',
'The Retributor': 'Retributor',
t: 'Schubdüsen',
TIME: 'Dauer',
tp: 'Torpedoaufhängung',
TOTAL: 'Gesamt',
TOTAL_RANGE: 'Maximale Reichweite',
TURRET: 'Geschützturm',
TYPE: 'Typ',
TYPE_6_TRANSPORTER: 'Typ-6 Transporter',
TYPE_7_TRANSPORTER: 'Typ-7 Transporter',
TYPE_9_HEAVY: 'Typ-9 Transporter (schwer)',
U: 'U',
UNLADEN: 'Unbeladen',
UPDATE_NOTIFICATION: 'Update verfügbar! Klicken zum Aktualisieren',
URL: 'URL',
UTILITY: 'Werkzeug',
UTILITY_MOUNTS: 'Werkzeug-Steckplatz',
VERSION: 'Version',
VIPER: 'Viper',
VULTURE: 'Vulture',
WEP: 'WAF',
YES: 'Ja'
'PHRASE_EXPORT_DESC': 'Una detallada exportaci\u00f3n JSON de tu construcci\u00f3n para usarlo en otros sitios web y herramientas',
'A-Rated': 'Calidad-A',
'about': 'Acerca',
'action': 'Acci\u00f3n',
'added': 'A\u00f1adido',
'Advanced Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n avanzado',
'agility': 'Maniobrabilidad',
'alpha': 'Alfa',
'ammo': 'Munici\u00f3n',
'PHRASE_CONFIRMATION': '\u00bfEst\u00e1s seguro?',
'armour': 'Blindaje',
'am': 'Unidad de auto-reparaciones',
'available': 'Disponible',
'backup': 'Reserva',
'Basic Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n b\u00e1sico',
'bl': 'L\u00e1ser de haz',
'bins': 'contenedores',
'boost': 'incrementar',
'build': 'Construcci\u00f3n',
'build name': 'Nombre de la construcci\u00f3n',
'builds': 'Construcciones',
'bh': 'mamparos',
'ul': 'Laser de r\u00e1fagas',
'buy': 'Comprar',
'cancel': 'Cancelar',
'c': 'Ca\u00f1\u00f3n',
'capital': 'capital',
'cargo': 'Carga',
'Cargo Hatch': 'Compuerta de carga',
'cr': 'Compartimento de carga',
'cs': 'Esc\u00e1ner de carga',
'cells': 'celdas',
'Chaff Launcher': 'Lanzador de birutas',
'close': 'Cerrar',
'cc': 'Controlador de Drones de Recogida',
'compare': 'Comparar',
'compare all': 'comparar todas',
'comparison': 'Comparativa',
'comparisons': 'Comparativas',
'component': 'Componente',
'cost': 'Coste',
'costs': 'Costes',
'cm': 'Contramedidas',
'create': 'Crear',
'create new': 'Crear nuevo',
'credits': 'Cr\u00e9ditos',
'damage': 'Da\u00f1o',
'delete': 'Borrar',
'delete all': 'Borrar todo',
'dep': 'desp',
'deployed': 'Desplegado',
'detailed export': 'Exportacion detallada',
'Detailed Surface Scanner': 'Escaner de exploraci\u00f3n detallada',
'disabled': 'Desactivado',
'discount': 'Descuento',
'dc': 'Ordenador de aterrizaje',
'done': 'Hecho',
'DPS': 'DPS (Da\u00f1o Por Segundo)',
'edit data': 'Editar datos',
'efficiency': 'Eficiencia',
'Electronic Countermeasure': 'Contramedidas electr\u00f3nicas',
'empty': 'Vac\u00edo',
'ENG': 'MOT',
'enter name': 'Introduce el nombre',
'export': 'exportar',
'fixed': 'fijo',
'forum': 'Foro',
'fc': 'Ca\u00f1\u00f3n de fragmentaci\u00f3n',
'fd': 'Motor de salto',
'ws': 'Esc\u00e1ner de Salto',
'fi': 'Interdictor FSD',
'fuel': 'Combustible',
'fs': 'Recolector de Combustible',
'ft': 'Tanque de combustible',
'fx': 'Sistema de Transferencia de Combustilble',
'full tank': 'Tanque lleno',
'Gimballed': 'Card\u00e1n',
'H': 'E',
'hardpoints': 'Montura de armas',
'hb': 'Controlador de Apertura de Bah\u00eda de Carga',
'Heat Sink Launcher': 'Eyector de Acumulador de Calor',
'huge': 'enorme',
'hull': 'Casco',
'hr': 'Sistema de Casco Reforzado',
'import': 'Importar',
'import all': 'Importar todo',
'insurance': 'Seguro',
'Intermediate Discovery Scanner': 'Esc\u00e1ner de exploraci\u00f3n media',
'internal compartments': 'Compartimentos internos',
'jump range': 'Rango de salto',
'jumps': 'Saltos',
'kw': 'Esc\u00e1ner Detector de Recompensas',
'L': 'G',
'laden': 'Cargada',
'language': 'Idioma',
'large': 'Grande',
'ls': 'Soporte vital',
'Lightweight Alloy': 'Aleaci\u00f3n ligera',
'limpets': 'Drones',
'lock factor': 'factor de bloqueo',
'mass': 'Masa',
'max': 'm\u00e1x',
'max mass': 'Masa m\u00e1xima',
'medium': 'medio',
'Military Grade Composite': 'Blindaje Militar',
'nl': 'Lanzaminas',
'Mining Lance': 'Lanza de miner\u00eda',
'ml': 'L\u00e1ser de miner\u00eda',
'Mirrored Surface Composite': 'Blindaje Reflectante',
'mr': 'Bah\u00eda de Misiles',
'mc': 'Ca\u00f1\u00f3n m\u00faltiple',
'net cost': 'Coste neto',
'PHRASE_NO_BUILDS': '\u00a1No se a\u00f1adieron plantillas para comparaci\u00f3n!',
'PHRASE_NO_RETROCH': 'No hay cambios en los ajutes',
'none': 'Nada',
'none created': 'Nada creado',
'off': 'apagado',
'on': 'encendido',
'optimal': '\u00f3ptimo',
'optimal mass': 'masa \u00f3ptima',
'optimize mass': 'optimizar masa',
'overwrite': 'Sobreescribir',
'PHRASE_IMPORT': 'Pega el JSON o imp\u00f3rtalo aqu\u00ed',
'penetration': 'penetraci\u00f3n',
'permalink': 'enlace permanente',
'pa': 'Acelerador de Plasma',
'Point Defence': 'Punto de Defensa',
'power': 'energ\u00eda',
'pd': 'distribuidor de energ\u00eda',
'pp': 'Planta de Energ\u00eda',
'priority': 'prioridad',
'proceed': 'Proceder',
'pc': 'Controlador de drones de prospecci\u00f3n',
'pl': 'L\u00e1ser de Pulso',
'PWR': 'POT',
'rg': 'Ca\u00f1\u00f3n de Riel',
'range': 'rango',
'rate': 'ratio',
'Reactive Surface Composite': 'Blindaje Reactivo',
'recharge': 'recargar',
'rf': 'Refineria',
'refuel time': 'Tiempo para repostar',
'Reinforced Alloy': 'Armadura reforzada',
'reload': 'Recargar',
'rename': 'Renombrar',
'repair': 'Reparar',
'reset': 'Reiniciar',
'ret': 'PLE',
'retracted': 'plegadas',
'retrofit costs': 'costes de equipamiento',
'retrofit from': 'equipamiento desde',
'ROF': 'RDF',
'S': 'P',
'save': 'guardar',
'sc': 'sc\u00e1ner',
'PHRASE_SELECT_BUILDS': 'Selecciona equipamientos para comparar',
'sell': 'Vender',
's': 'Sensores',
'settings': 'Configuraci\u00f3n',
'sb': 'Potenciador de Escudos',
'scb': 'C\u00e9lula de Energ\u00eda de Escudos',
'sg': 'Generador de escudos',
'shields': 'Escudos',
'ship': 'Nave ',
'ships': 'Naves',
'shortened': 'Abreviado',
'size': 'Tama\u00f1o',
'skip': 'omitir',
'small': 'Peque\u00f1o',
'speed': 'velocidad',
'standard': 'est\u00e1ndar',
'Standard Docking Computer': 'Computador de Atraque Est\u00e1ndar',
'Stock': 'De serie',
'SYS': 'SIS',
'T_LOAD': 'c-t\u00e9rmica',
't': 'Propulsores',
'time': 'Tiempo',
'tp': 'Anclaje de torpedo',
'total': 'Total',
'total range': 'Rango total',
'turret': 'torreta',
'type': 'Tipo',
'unladen': 'Sin carga',
'PHRASE_UPDATE_RDY': 'Actualizacion disponible! Haz click para recargar',
'URL': 'Enlace',
'utility': 'utilidad',
'utility mounts': 'monturas de utilidad',
'version': 'Versi\u00f3n',
'WEP': 'ARM',
'yes': 'si',
'PHRASE_BACKUP_DESC': 'Copia de seguridad de todos los datos de Coriolis para guardarlos o transferirlos a otro navegador\/dispositivo'
});
}]);

View File

@@ -15,38 +15,38 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
shortMonths: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.']
});
$translateProvider.translations('fr', {
PHRASE_EXPORT_DESC: 'Un export détaillé en JSON de votre configuration pour l\'utilisation dans d\'autres sites et outils',
PHRASE_EXPORT_DESC: 'Export détaillé en JSON de votre configuration pour utilisation sur d\'autres sites et outils',
'A-Rated': 'Classe-A ',
about: 'à propos',
added: 'ajouté',
Advanced: 'Avancé',
'Advanced Discovery Scanner': 'Scanner de découverte avancé',
agility: 'agilité',
ammo: 'munition',
PHRASE_CONFIRMATION: 'Êtes-vous sûr?',
'Advanced Discovery Scanner': 'Détecteur découverte avancé',
agility: 'manœuvrabilité',
ammo: 'munitions',
PHRASE_CONFIRMATION: 'Êtes-vous sûr ?',
armour: 'Armure',
am: 'Unité de réparation automatique',
am: 'Unité de maintenance de terrain auto',
available: 'Disponibilité',
backup: 'sauvegarde',
'Basic Discovery Scanner': 'Scanner de découverte de base',
bl: 'Laser rayon',
bins: 'bacs',
'Basic Discovery Scanner': 'Détecteur découverte simple',
bl: 'Rayon Laser',
bins: 'bennes',
build: 'Configuration',
'build name': 'Nom de la configuration',
builds: 'Configurations',
bh: 'Coque',
ul: 'Laser salves',
ul: 'Laser à rafale',
buy: 'Acheter',
cancel: 'Annuler',
c: 'Canon',
cargo: 'Soute',
'Cargo Hatch': 'hublot de chargement',
'Cargo Hatch': 'Écoutille de soute',
cr: 'Compartiment de soute',
cs: 'Scanner de soute',
cells: 'Cellule',
cs: 'Détecteur de cargaison',
cells: 'Cellules',
'Chaff Launcher': 'Lanceur de paillettes',
close: 'fermer',
cc: 'Contrôleur de prospecteur',
cc: 'Contrôleur de Collecteur',
compare: 'comparer',
'compare all': 'tout comparer',
comparison: 'comparaison',
@@ -64,17 +64,17 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
dep: 'depl',
deployed: 'déployé',
'detailed export': 'export détaillé',
'Detailed Surface Scanner': 'Scanner de surface détaillé',
'Detailed Surface Scanner': 'Détecteur surface détaillé',
disabled: 'désactivé',
discount: 'ristourne',
discount: 'réduction',
Distruptor: 'Disrupteur',
dc: 'Ordinateur d\'appontage',
done: 'Fait',
done: 'Valider',
'edit data': 'Editer donnée',
efficiency: 'efficience',
'Electronic Countermeasure': 'Contre mesure électronique',
efficiency: 'efficacité',
'Electronic Countermeasure': 'Contre-mesures électroniques',
empty: 'Vide',
'enter name': 'Entrer nom',
'enter name': 'Entrer un nom',
fixed: 'fixé',
fc: 'Canon à fragmentation',
fd: 'Réacteur FSD',
@@ -83,30 +83,30 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
fuel: 'carburant',
fs: 'Récupérateur de carburant',
ft: 'Réservoir de carburant',
fx: 'Drone de ravitaillement',
fx: 'Contrôleur de ravitailleur',
'full tank': 'Réservoir plein',
Gimballed: 'Point',
hardpoints: 'Points d\'emport',
hb: 'Contrôle de patelle perce-soute',
'Heat Sink Launcher': 'Ejecteur de dissipateur thermique',
'Heat Sink Launcher': 'Éjecteur de dissipateur thermique',
huge: 'Très grand',
hull: 'Coque',
hr: 'Renfort de soute',
hr: 'Ensemble de mesures permettant de renforcer la coque',
'Imperial Hammer': 'Marteau impérial',
import: 'Importer',
'import all': 'Importer tout',
insurance: 'Assurance',
'Intermediate Discovery Scanner': 'Scanner de découverte de portée intermédiaire',
'Intermediate Discovery Scanner': 'Détecteur découverte intermédiaire',
'internal compartments': 'compartiments internes',
'jump range': 'Distance de saut',
jumps: 'Sauts',
kw: 'Détecteur d\'avis de recherche',
L: 'Langage',
laden: 'chargé',
language: 'Langage',
large: 'grand',
ls: 'Support vital',
language: 'Langue',
large: 'large',
ls: 'Systèmes de survie',
'Lightweight Alloy': 'alliage léger',
'limpets': 'Patelles',
'lock factor': 'facteur inhibition de masse',
LS: 'SL',
LY: 'AL',
@@ -116,37 +116,37 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
nl: 'Lance-mines',
'Mining Lance': 'Lance de minage',
ml: 'Laser minier',
'Mirrored Surface Composite': 'Composite à surface mirroir',
mr: 'Lance missiles',
'Mirrored Surface Composite': 'Composite à surface miroir',
mr: 'Batterie de missiles',
mc: 'Canon multiple',
'net cost': 'coûts nets',
no: 'non',
PHRASE_NO_BUILDS: 'Défaut de configuration pour comparaison',
PHRASE_NO_RETROCH: 'configuration non modifiée',
PHRASE_NO_BUILDS: 'Aucune configuration ajoutée pour comparaison',
PHRASE_NO_RETROCH: 'Configuration non modifiée',
none: 'aucun',
'none created': 'Rien de créé',
off: 'éteint',
on: 'allumé',
'optimal mass': 'masse optimale',
'optimize mass': 'optimiser masse',
overwrite: 'écraser',
overwrite: 'remplacer',
Pacifier: 'Pacificateur',
PHRASE_IMPORT: 'Coller JSON ou importer ici',
PHRASE_IMPORT: 'Coller ici votre JSON à importer',
pen: 'pén.',
penetration: 'pénétration',
permalink: 'lien durable',
pa: 'accélérateur plasma',
'Point Defence': 'Défense ponctuelle',
power: 'énergie',
pd: 'distributeur d\'énérgie',
pp: 'centrale d\'énergie',
pd: 'Répartiteur de puissance',
pp: 'Générateur',
priority: 'priorité',
psg: 'générateur de bouclier prisme',
proceed: 'continuer',
pc: 'Drône de minage',
pc: 'Contrôleur de prospecteur',
pl: 'Laser à impulsion',
PWR: 'Puissance',
rg: 'Canon électromagnétique',
PWR: 'P',
rg: 'Canon électrique',
range: 'portée',
rate: 'cadence',
'Reactive Surface Composite': 'Composite à surface réactive',
@@ -165,9 +165,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
ROF: 'cadence',
save: 'sauvegarder',
sc: 'scanner',
PHRASE_SELECT_BUILDS: 'Sélectionner configurations à comparer',
PHRASE_SELECT_BUILDS: 'Sélectionner les configurations à comparer',
sell: 'vendre',
s: 'détecteurs',
s: 'Capteurs',
settings: 'paramètres',
sb: 'Survolteur de bouclier',
scb: 'Réserve de cellules d\'énergie',
@@ -180,9 +180,9 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
skip: 'Suivant',
small: 'petit',
speed: 'vitesse',
'Standard Docking Computer': 'ordinateur amarrage standard',
'Standard Docking Computer': 'Ordinateur d\'appontage standard',
Stock: 'de base',
T_LOAD: 'degrés',
T_LOAD: 'Charge thermique',
'The Retributor': 'Le Rétributeur',
t: 'propulseurs',
time: 'temps',
@@ -190,11 +190,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'total range': 'Distance maximale',
turret: 'tourelle',
unladen: 'Non chargé',
PHRASE_UPDATE_RDY: 'Mise à jour disponible ! Cliquez pour rafraichir',
PHRASE_UPDATE_RDY: 'Mise à jour disponible ! Cliquez ici pour mettre à jour',
utility: 'utilitaire',
'utility mounts': 'Support utilitaire',
WEP: 'ARM',
yes: 'oui',
PHRASE_BACKUP_DESC: 'Exportation détaillée des données Coriolis pour l\'utilisation dans d\'autres sites et outils'
PHRASE_BACKUP_DESC: 'Exportation détaillée des données de Coriolis pour l\'utilisation dans d\'autres sites et outils'
});
}]);

133
app/js/i18n/it.js Normal file
View File

@@ -0,0 +1,133 @@
angular.module('app').config(['$translateProvider', 'localeFormatProvider', function($translateProvider, localeFormatProvider) {
// Declare number format settings
localeFormatProvider.addFormat('es', {
decimal: ',',
thousands: '.',
grouping: [3],
currency: ['€', ''],
dateTime: '%A %e %B %Y, %X',
date: '%d/%m/%Y',
time: '%H:%M:%S',
periods: ['AM', 'PM'], // unused
days: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],
shortDays: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
shortMonths: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic']
});
$translateProvider.translations('it', {
PHRASE_EXPORT_DESC: 'Un export dettagliato in formato JSON della tua configurazione per essere usato in altri siti o tools',
'A-Rated': 'Classe A',
about: 'Info su Coriolis',
action: 'azione',
added: 'aggiunto',
Advanced: 'Avanzato',
agility: 'agilità',
ammo: 'munizioni',
PHRASE_CONFIRMATION: 'Sei sicuro ?',
armour: 'armatura',
available: 'disponibile',
bins: 'contenitore',
build: 'configurazione',
'build name': 'Nome Configurazione',
builds: 'configurazioni',
buy: 'compra',
cancel: 'cancella',
cells: 'celle',
close: 'chiudi',
compare: 'confronta',
'compare all': 'confronta tutti',
comparison: 'comparazione',
comparisons: 'comparazioni',
component: 'componente',
cost: 'costo',
costs: 'costi',
cm: 'Contromisure',
create: 'crea',
'create new': 'crea nuovo',
credits: 'crediti',
damage: 'danno',
delete: 'elimina',
'delete all': 'elimina tutto',
dep: 'dep',
deployed: 'deployed',
'detailed export': 'esportazione dettagliata',
disabled: 'disabilita',
discount: 'sconto',
done: 'fatto',
'edit data': 'modifica i dati',
efficiency: 'efficenza',
empty: 'vuoto',
Enforcer: 'Rinforzatore',
'enter name': 'Inserisci un nome',
export: 'esporta',
fixed: 'fissi',
fuel: 'carburante',
'full tank': 'Serbatoio Pieno',
huge: 'enorme',
hull: 'corazza',
import: 'importa',
'import all': 'importa tutto',
insurance: 'assicurazione',
'internal compartments': 'compartimenti interni',
'jump range': 'distanza di salto',
jumps: 'salti',
laden: 'carico',
language: 'lingua',
large: 'largo',
mass: 'massa',
max: 'massimo',
'max mass': 'massa massimale',
medium: 'medio',
'net cost': 'costo netto',
PHRASE_NO_BUILDS: 'nessuna configurazione è stata aggiunta per la comparazione!',
PHRASE_NO_RETROCH: 'Nessun cambiamento di Retrofitting',
none: 'nessuno',
'none created': 'nessuno creato',
optimal: 'ottimale',
'optimal mass': 'massa ottimale',
'optimize mass': 'ottimizza la massa',
overwrite: 'sovrasscrivi',
PHRASE_IMPORT: 'Incolla un JSON o importalo qua',
penetration: 'penetrazione',
power: 'potenza',
priority: 'priorità',
proceed: 'procedi',
range: 'distanza',
rate: 'rateo',
recharge: 'ricarica',
reload: 'ricarica',
rename: 'rinomina',
repair: 'ripara',
reset: 'resetta',
retracted: 'retratti',
'retrofit costs': 'costi di retrofit',
'retrofit from': 'retrofit da',
save: 'salva',
sell: 'vendi',
settings: 'impostazioni',
shields: 'scudi',
ship: 'nave',
ships: 'navi',
shortened: 'accorciato',
size: 'grandezza',
skip: 'salta',
small: 'piccolo',
speed: 'velocità',
Stock: 'appena comprata',
t: 'thrusters',
time: 'tempo',
total: 'totale',
'total range': 'distanza totale',
turret: 'torrette',
type: 'tipo',
unladen: 'scarico',
PHRASE_UPDATE_RDY: 'Aggiornamenti disponibili ! Clicca per Aggiornare',
utility: 'supporti',
'utility mounts': 'supporti di utilità',
version: 'versione',
yes: 'sì',
PHRASE_BACKUP_DESC: 'Esportazione di tutti i dati su Coriolis per salvarli o trasferirli in un altro Browser/dispositivo'
});
}]);

View File

@@ -3,19 +3,21 @@ angular.module('app').config(['$translateProvider', function($translateProvider)
.useSanitizeValueStrategy('escapeParameters')
.useStorage('Persist')
.fallbackLanguage('en') // Use English as default/fallback language
.registerAvailableLanguageKeys(['en', 'de', 'fr', 'ru'], { // TODO: add 'es' to the array when ready
.registerAvailableLanguageKeys(['en', 'de', 'es', 'fr', 'it', 'ru'], {
'en*': 'en',
'de*': 'de',
//'es*': 'es',
'es*': 'es',
'fr*': 'fr',
'it*': 'it',
'ru*': 'ru'
})
.determinePreferredLanguage();
}])
.value('Languages', {
en: 'English',
de: 'Deutsh',
//es: 'Español',
de: 'Deutsch',
it: 'Italiano',
es: 'Español',
fr: 'Français',
ru: 'ру́сский язы́к'
ru: 'ру́сский'
});

View File

@@ -31,7 +31,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
armour: 'Броня',
am: 'Ремонтный модуль',
available: 'доступно',
backup: 'бэкап',
backup: 'Резервная копия',
'Basic Discovery Scanner': 'Стандартный исследовательский сканер',
bl: 'Лучевой лазер',
beta: 'Бета',
@@ -40,11 +40,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
build: 'cборка',
'build name': 'название сборки',
builds: 'cборки',
bh: 'Переборки',
bh: 'Корпус',
ul: 'Мультиимпульсный лазер',
buy: 'купить',
cancel: 'отменить',
c: 'Крупнокалиберное орудие',
c: 'Пушка',
capital: 'Крупный',
cargo: 'Груз',
'Cargo Hatch': 'Грузовой люк',
@@ -71,7 +71,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
delete: 'Удалить',
'delete all': 'Удалить все',
dep: 'Вып',
deployed: 'Готово',
deployed: 'Открыты',
'detailed export': 'Подробный экспорт',
'Detailed Surface Scanner': 'Подробный сканер поверхности',
disabled: 'Отключено',
@@ -79,15 +79,15 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
Distruptor: 'Дисраптор',
dc: 'Стыковочный компьютер',
done: 'готово',
DPS: 'ПВС',
DPS: 'УВС',
'edit data': 'Редактирование',
efficiency: 'Эффективность',
'Electronic Countermeasure': 'Электронное противодействие',
'Electronic Countermeasure': 'Электронная противомера',
empty: 'пусто',
Enforcer: 'Энфорсер',
ENG: 'ДВГ',
'enter name': 'Введите имя',
EPS: 'э/с',
EPS: 'ЭВС',
export: 'Экспорт',
fixed: 'Фиксированое',
forum: 'Форум',
@@ -97,11 +97,11 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
fi: 'Перехватчик FSD',
fuel: 'Топливо',
fs: 'Топливозаборник',
fs: 'Топливосборщик',
ft: 'Топливный бак',
fx: 'Контроллер Дрона-заправщика',
'full tank': 'Полный бак',
Gimballed: 'Доводимое',
Gimballed: 'Шарнирное',
H: 'O',
hardpoints: 'Орудийные порты',
hb: 'Контроллер "дрон-взломщик"',
@@ -124,6 +124,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
large: 'большой',
ls: 'Система жизнеобеспечения',
'Lightweight Alloy': 'Легкий сплав',
'limpets': 'Дроны',
'lock factor': 'Масс. блок',
LS: 'Св.сек',
LY: 'Св.лет',
@@ -133,13 +134,13 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
max: 'Макс',
'max mass': 'Максимальная масса',
medium: 'Средний',
'Military Grade Composite': 'Композит военного класса',
nl: 'Минный аппарат',
'Military Grade Composite': 'Военный композит',
nl: 'Минноукладчик',
'Mining Lance': 'Бурильная сулица',
ml: 'Горный лазер',
'Mirrored Surface Composite': 'Композит с зеркальной поверхностью',
ml: 'Бурильный лазер',
'Mirrored Surface Composite': 'Зеркальный композит',
mr: 'Ракетная установка',
mc: 'Скорострельное орудие',
mc: 'Многоствольное орудие',
'net cost': 'разница в цене',
no: 'Нет',
PHRASE_NO_BUILDS: 'Нечего сравнивать',
@@ -153,7 +154,7 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
'optimize mass': 'Оптимизировать массу',
overwrite: 'перезаписать',
Pacifier: 'Миротворец',
'Pack-Hound': 'Ракеты "Собачья стая" or original name(eng)',
'Pack-Hound': 'Ракета "Гончая"',
PHRASE_IMPORT: 'Для импорта вставьте код в эту форму',
pen: 'ПБ',
penetration: 'Пробитие',
@@ -170,10 +171,10 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
pc: 'Контроллер "Дрон-исследователь"',
pl: 'Импульсный лазер',
PWR: 'Эн',
rg: 'Рельсовая пушка',
rg: 'Рельсотрон',
range: 'Дальность',
rate: 'скорость',
'Reactive Surface Composite': 'Композитно-реактивная поверхность',
'Reactive Surface Composite': 'Динамическая защита',
recharge: 'Перезарядка',
rf: 'Переработка',
'refuel time': 'Время дозаправки',
@@ -211,8 +212,8 @@ angular.module('app').config(['$translateProvider', 'localeFormatProvider', func
SYS: 'СИС',
T: 'Т',
T_LOAD: 'Тепл.',
'The Retributor': 'Орудие Возмездия',
t: 'Ускорители',
'The Retributor': '"Возмездие"',
t: 'Двигатели',
time: 'Время',
tp: 'Торпедный аппарат',
total: 'Всего',

View File

@@ -16,7 +16,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
var data = [
ship.bulkheads.id,
_.map(ship.common, mapGroup, power),
_.map(ship.standard, mapGroup, power),
_.map(ship.hardpoints, mapGroup, power),
_.map(ship.internal, mapGroup, power),
'.',
@@ -36,7 +36,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
* @param {string} dataString The string to deserialize
*/
this.toShip = function(ship, dataString) {
var common = new Array(ship.common.length),
var standard = new Array(ship.standard.length),
hardpoints = new Array(ship.hardpoints.length),
internal = new Array(ship.internal.length),
parts = dataString.split('.'),
@@ -52,12 +52,12 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
priorities = LZString.decompressFromBase64(parts[2].replace(/-/g, '/')).split('');
}
decodeToArray(code, internal, decodeToArray(code, hardpoints, decodeToArray(code, common, 1)));
decodeToArray(code, internal, decodeToArray(code, hardpoints, decodeToArray(code, standard, 1)));
ship.buildWith(
{
bulkheads: code.charAt(0) * 1,
common: common,
standard: standard,
hardpoints: hardpoints,
internal: internal
},
@@ -67,7 +67,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
};
this.toDetailedBuild = function(buildName, ship, code) {
var standard = ship.common,
var standard = ship.standard,
hardpoints = ship.hardpoints,
internal = ship.internal;
@@ -128,7 +128,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
throw 'Invalid bulkheads: ' + standard.bulkheads;
}
var common = _.map(
var standardIds = _.map(
['powerPlant', 'thrusters', 'frameShiftDrive', 'lifeSupport', 'powerDistributor', 'sensors', 'fuelTank'],
function(c) {
if (!standard[c].class || !standard[c].rating) {
@@ -143,11 +143,10 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
var internal = _.map(comps.internal, function(c) { return c ? Components.findInternalId(c.group, c.class, c.rating, c.name) : 0; });
var hardpoints = _.map(comps.hardpoints, function(c) {
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount], c.missile) : 0;
});
hardpoints = hardpoints.concat(_.map(comps.utility, function(c) {
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount]) : 0;
}));
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount], c.missile) : 0;
}).concat(_.map(comps.utility, function(c) {
return c ? Components.findHardpointId(c.group, c.class, c.rating, c.name, MountMap[c.mount]) : 0;
}));
// The ordering of these arrays must match the order in which they are read in Ship.buildWith
priorities = priorities.concat(_.map(comps.hardpoints, function(c) { return (!c || c.priority === undefined) ? 0 : c.priority - 1; }),
@@ -157,7 +156,7 @@ angular.module('app').service('Serializer', ['lodash', 'GroupMap', 'MountMap', '
_.map(comps.utility, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; }),
_.map(comps.internal, function(c) { return (!c || c.enabled === undefined) ? true : c.enabled * 1; }));
ship.buildWith({ bulkheads: bulkheads, common: common, hardpoints: hardpoints, internal: internal }, priorities, enabled);
ship.buildWith({ bulkheads: bulkheads, standard: standardIds, hardpoints: hardpoints, internal: internal }, priorities, enabled);
return ship;
};

View File

@@ -13,28 +13,28 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
return maxClass;
}
function ComponentSet(components, mass, maxCommonArr, maxInternal, maxHardPoint) {
function ComponentSet(components, mass, maxStandardArr, maxInternal, maxHardPoint) {
this.mass = mass;
this.common = {};
this.standard = {};
this.internal = {};
this.hardpoints = {};
this.hpClass = {};
this.intClass = {};
this.common[0] = filter(components.common[0], maxCommonArr[0], 0, mass); // Power Plant
this.common[2] = filter(components.common[2], maxCommonArr[2], 0, mass); // FSD
this.common[4] = filter(components.common[4], maxCommonArr[4], 0, mass); // Power Distributor
this.common[6] = filter(components.common[6], maxCommonArr[6], 0, mass); // Fuel Tank
this.standard[0] = filter(components.standard[0], maxStandardArr[0], 0, mass); // Power Plant
this.standard[2] = filter(components.standard[2], maxStandardArr[2], 0, mass); // FSD
this.standard[4] = filter(components.standard[4], maxStandardArr[4], 0, mass); // Power Distributor
this.standard[6] = filter(components.standard[6], maxStandardArr[6], 0, mass); // Fuel Tank
// Thrusters, filter components by class only (to show full list of ratings for that class)
var minThrusterClass = _.reduce(components.common[1], function(minClass, thruster) {
var minThrusterClass = _.reduce(components.standard[1], function(minClass, thruster) {
return (thruster.maxmass >= mass && thruster.class < minClass) ? thruster.class : minClass;
}, maxCommonArr[1]);
this.common[1] = filter(components.common[1], maxCommonArr[1], minThrusterClass, 0); // Thrusters
}, maxStandardArr[1]);
this.standard[1] = filter(components.standard[1], maxStandardArr[1], minThrusterClass, 0); // Thrusters
// Slots where component class must be equal to slot class
this.common[3] = filter(components.common[3], maxCommonArr[3], maxCommonArr[3], 0); // Life Supprt
this.common[5] = filter(components.common[5], maxCommonArr[5], maxCommonArr[5], mass); // Sensors
this.standard[3] = filter(components.standard[3], maxStandardArr[3], maxStandardArr[3], 0); // Life Supprt
this.standard[5] = filter(components.standard[5], maxStandardArr[5], maxStandardArr[5], mass); // Sensors
for (var h in components.hardpoints) {
this.hardpoints[h] = filter(components.hardpoints[h], maxHardPoint, 0, mass);
@@ -94,7 +94,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
}
ComponentSet.prototype.lightestPowerDist = function(boostEnergy) {
var pds = this.common[4];
var pds = this.standard[4];
var pd = pds[0];
for (var i = 1; i < pds.length; i++) {
@@ -106,7 +106,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
};
ComponentSet.prototype.lightestThruster = function(ladenMass) {
var ths = this.common[1];
var ths = this.standard[1];
var th = ths[0];
for (var i = 1; i < ths.length; i++) {
@@ -117,8 +117,19 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
return th.class + th.rating;
};
ComponentSet.prototype.lightestPowerPlant = function(powerUsed) {
var pps = this.common[0];
ComponentSet.prototype.lightestShieldGenerator = function(hullMass) {
var sg = null;
_.forEach(this.internal.sg, function(s) {
if (sg == null || (s.mass < sg.mass && s.minmass <= hullMass && s.maxmass > hullMass)) {
sg = s;
}
});
return sg.id;
};
ComponentSet.prototype.lightestPowerPlant = function(powerUsed, rating) {
var pps = this.standard[0];
var pp = null;
for (var i = 0; i < pps.length; i++) {
@@ -126,7 +137,7 @@ angular.module('shipyard').factory('ComponentSet', ['lodash', function(_) {
pp = pps[i];
}
}
return pp.class + (pp.rating != 'D' ? 'A' : 'D'); // Use A rated if C,E
return pp.class + (pp.rating != 'D' || rating == 'A' ? 'A' : 'D'); // Use A rated if C,E
};
return ComponentSet;

View File

@@ -1,4 +1,4 @@
angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength', 'calcJumpRange', 'calcTotalRange', 'lodash', 'ArmourMultiplier', function(Components, calcShieldStrength, calcJumpRange, calcTotalRange, _, ArmourMultiplier) {
angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength', 'calcJumpRange', 'calcTotalRange', 'calcSpeed', 'lodash', 'ArmourMultiplier', function(Components, calcShieldStrength, calcJumpRange, calcTotalRange, calcSpeed, _, ArmourMultiplier) {
/**
* Returns the power usage type of a slot and it's particular component
@@ -8,9 +8,6 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
*/
function powerUsageType(slot, component) {
if (component) {
if (component.retractedOnly) {
return 'retOnly';
}
if (component.passive) {
return 'retracted';
}
@@ -23,18 +20,19 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
*
* @param {string} id Unique ship Id / Key
* @param {object} properties Basic ship properties such as name, manufacturer, mass, etc
* @param {object} slots Collection of slot groups (standard/common, internal, hardpoints) with their max class size.
* @param {object} slots Collection of slot groups (standard/standard, internal, hardpoints) with their max class size.
*/
function Ship(id, properties, slots) {
this.id = id;
this.cargoHatch = { c: Components.cargoHatch(), type: 'SYS' };
this.bulkheads = { incCost: true, maxClass: 8 };
this.availCS = Components.forShip(id);
for (var p in properties) { this[p] = properties[p]; } // Copy all base properties from shipData
for (var slotType in slots) { // Initialize all slots
var slotGroup = slots[slotType];
var group = this[slotType] = []; // Initialize Slot group (Common, Hardpoints, Internal)
var group = this[slotType] = []; // Initialize Slot group (Standard, Hardpoints, Internal)
for (var i = 0; i < slotGroup.length; i++) {
if (typeof slotGroup[i] == 'object') {
group.push({ id: null, c: null, incCost: true, maxClass: slotGroup[i].class, eligible: slotGroup[i].eligible });
@@ -46,18 +44,18 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
// Make a Ship 'slot'/item similar to other slots
this.c = { incCost: true, type: 'SHIP', discountedCost: this.hullCost, c: { name: this.name, cost: this.hullCost } };
this.costList = _.union(this.internal, this.common, this.hardpoints);
this.costList = _.union(this.internal, this.standard, this.hardpoints);
this.costList.push(this.bulkheads); // Add The bulkheads
this.costList.unshift(this.c); // Add the ship itself to the list
this.powerList = _.union(this.internal, this.hardpoints);
this.powerList.unshift(this.cargoHatch);
this.powerList.unshift(this.common[1]); // Add Thrusters
this.powerList.unshift(this.common[5]); // Add Sensors
this.powerList.unshift(this.common[4]); // Add Power Distributor
this.powerList.unshift(this.common[3]); // Add Life Support
this.powerList.unshift(this.common[2]); // Add FSD
this.powerList.unshift(this.common[0]); // Add Power Plant
this.powerList.unshift(this.standard[1]); // Add Thrusters
this.powerList.unshift(this.standard[5]); // Add Sensors
this.powerList.unshift(this.standard[4]); // Add Power Distributor
this.powerList.unshift(this.standard[3]); // Add Life Support
this.powerList.unshift(this.standard[2]); // Add FSD
this.powerList.unshift(this.standard[0]); // Add Power Plant
this.shipCostMultiplier = 1;
this.componentCostMultiplier = 1;
@@ -71,16 +69,101 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
];
}
//*********//
// GETTERS //
//*********//
Ship.prototype.getAvailableComponents = function() {
return this.availCS;
};
Ship.prototype.getSlotStatus = function(slot, deployed) {
if (!slot.c) { // Empty Slot
return 0; // No Status (Not possible to be active in this state)
} else if (!slot.enabled) {
return 1; // Disabled
} else if (deployed) {
return this.priorityBands[slot.priority].deployedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
// Active hardpoints have no retracted status
} else if ((slot.cat === 1 && !slot.c.passive)) {
return 0; // No Status (Not possible to be active in this state)
}
return this.priorityBands[slot.priority].retractedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
};
/**
* Calculate jump range using the installed FSD and the
* specified mass which can be more or less than ships actual mass
* @param {number} mass Mass in tons
* @param {number} fuel Fuel available in tons
* @return {number} Jump range in Light Years
*/
Ship.prototype.getJumpRangeForMass = function(mass, fuel) {
return calcJumpRange(mass, this.standard[2].c, fuel);
};
/**
* Find an internal slot that has an installed component of the specific group.
*
* @param {string} group Component group/type
* @return {number} The index of the slot in ship.internal
*/
Ship.prototype.findInternalByGroup = function(group) {
var index;
if (group == 'sg' || group == 'psg' || group == 'bsg') {
index = _.findIndex(this.internal, function(slot) {
return slot.c && (slot.c.grp == 'sg' || slot.c.grp == 'psg' || slot.c.grp == 'bsg');
});
} else {
index = _.findIndex(this.internal, function(slot) {
return slot.c && slot.c.grp == group;
});
}
if (index !== -1) {
return this.internal[index];
}
return null;
};
//**********************//
// Mutate / Update Ship //
//**********************//
/**
* Recalculate all item costs and total based on discounts.
* @param {number} shipCostMultiplier Ship cost multiplier discount (e.g. 0.9 === 10% discount)
* @param {number} componentCostMultiplier Component cost multiplier discount (e.g. 0.75 === 25% discount)
*/
Ship.prototype.applyDiscounts = function(shipCostMultiplier, componentCostMultiplier) {
var total = 0;
var costList = this.costList;
for (var i = 0, l = costList.length; i < l; i++) {
var item = costList[i];
if (item.c && item.c.cost) {
item.discountedCost = item.c.cost * (item.type == 'SHIP' ? shipCostMultiplier : componentCostMultiplier);
if (item.incCost) {
total += item.discountedCost;
}
}
}
this.shipCostMultiplier = shipCostMultiplier;
this.componentCostMultiplier = componentCostMultiplier;
this.totalCost = total;
return this;
};
/**
* Builds/Updates the ship instance with the components[comps] passed in.
* @param {object} comps Collection of components used to build the ship
*/
Ship.prototype.buildWith = function(comps, priorities, enabled) {
var internal = this.internal,
common = this.common,
standard = this.standard,
hps = this.hardpoints,
bands = this.priorityBands,
cl = common.length,
cl = standard.length,
i, l;
// Reset Cumulative stats
@@ -110,26 +193,26 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
}
for (i = 0; i < cl; i++) {
common[i].cat = 0;
common[i].enabled = enabled ? enabled[i + 1] * 1 : true;
common[i].priority = priorities ? priorities[i + 1] * 1 : 0;
common[i].type = 'SYS';
common[i].c = common[i].id = null; // Resetting 'old' component if there was one
common[i].discountedCost = 0;
standard[i].cat = 0;
standard[i].enabled = enabled ? enabled[i + 1] * 1 : true;
standard[i].priority = priorities && priorities[i + 1] ? priorities[i + 1] * 1 : 0;
standard[i].type = 'SYS';
standard[i].c = standard[i].id = null; // Resetting 'old' component if there was one
standard[i].discountedCost = 0;
if (comps) {
this.use(common[i], comps.common[i], Components.common(i, comps.common[i]), true);
this.use(standard[i], comps.standard[i], Components.standard(i, comps.standard[i]), true);
}
}
common[1].type = 'ENG'; // Thrusters
common[2].type = 'ENG'; // FSD
standard[1].type = 'ENG'; // Thrusters
standard[2].type = 'ENG'; // FSD
cl++; // Increase accounts for Cargo Scoop
for (i = 0, l = hps.length; i < l; i++) {
hps[i].cat = 1;
hps[i].enabled = enabled ? enabled[cl + i] * 1 : true;
hps[i].priority = priorities ? priorities[cl + i] * 1 : 0;
hps[i].priority = priorities && priorities[cl + i] ? priorities[cl + i] * 1 : 0;
hps[i].type = hps[i].maxClass ? 'WEP' : 'SYS';
hps[i].c = hps[i].id = null; // Resetting 'old' component if there was one
hps[i].discountedCost = 0;
@@ -144,7 +227,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
for (i = 0, l = internal.length; i < l; i++) {
internal[i].cat = 2;
internal[i].enabled = enabled ? enabled[cl + i] * 1 : true;
internal[i].priority = priorities ? priorities[cl + i] * 1 : 0;
internal[i].priority = priorities && priorities[cl + i] ? priorities[cl + i] * 1 : 0;
internal[i].type = 'SYS';
internal[i].id = internal[i].c = null; // Resetting 'old' component if there was one
internal[i].discountedCost = 0;
@@ -156,107 +239,54 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
// Update aggragated stats
if (comps) {
this.updatePower();
this.updateJumpStats();
this.updateShieldStrength();
this.updatePower()
.updateJumpStats()
.updateShieldStrength()
.updateTopSpeed();
}
return this;
};
Ship.prototype.useBulkhead = function(index, preventUpdate) {
var oldBulkhead = this.bulkheads.c;
this.bulkheads.id = index;
this.bulkheads.c = Components.bulkheads(this.id, index);
this.bulkheads.discountedCost = this.bulkheads.c.cost * this.componentCostMultiplier;
this.armourMultiplier = ArmourMultiplier[index];
this.updateStats(this.bulkheads, this.bulkheads.c, oldBulkhead, preventUpdate);
Ship.prototype.emptyHardpoints = function() {
for (var i = this.hardpoints.length; i--; ) {
this.use(this.hardpoints[i], null, null);
}
return this;
};
/**
* Update a slot with a the component if the id is different from the current id for this slot.
* Has logic handling components that you may only have 1 of (Shield Generator or Refinery).
*
* @param {object} slot The component slot
* @param {string} id Unique ID for the selected component
* @param {object} component Properties for the selected component
* @param {boolean} preventUpdate If true, do not update aggregated stats
*/
Ship.prototype.use = function(slot, id, component, preventUpdate) {
if (slot.id != id) { // Selecting a different component
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
if (slot.cat == 2 && component && _.includes(['psg', 'sg', 'rf', 'fs'], component.grp)) {
// Find another internal slot that already has this type/group installed
var similarSlot = this.findInternalByGroup(component.grp);
// If another slot has an installed component with of the same type
if (!preventUpdate && similarSlot && similarSlot !== slot) {
this.updateStats(similarSlot, null, similarSlot.c, true); // Update stats but don't trigger a global update
similarSlot.id = similarSlot.c = null; // Empty the slot
similarSlot.discountedCost = 0;
}
Ship.prototype.emptyInternal = function() {
for (var i = this.internal.length; i--; ) {
this.use(this.internal[i], null, null);
}
return this;
};
Ship.prototype.emptyUtility = function() {
for (var i = this.hardpoints.length; i--; ) {
if (!this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], null, null);
}
var oldComponent = slot.c;
slot.id = id;
slot.c = component;
slot.discountedCost = (component && component.cost) ? component.cost * this.componentCostMultiplier : 0;
this.updateStats(slot, component, oldComponent, preventUpdate);
}
return this;
};
/**
* Calculate jump range using the installed FSD and the
* specified mass which can be more or less than ships actual mass
* @param {number} mass Mass in tons
* @param {number} fuel Fuel available in tons
* @return {number} Jump range in Light Years
*/
Ship.prototype.jumpRangeWithMass = function(mass, fuel) {
return calcJumpRange(mass, this.common[2].c, fuel);
};
/**
* Find an internal slot that has an installed component of the specific group.
*
* @param {string} group Component group/type
* @return {number} The index of the slot in ship.internal
*/
Ship.prototype.findInternalByGroup = function(group) {
var index;
if (group == 'sg' || group == 'psg') {
index = _.findIndex(this.internal, function(slot) {
return slot.c && (slot.c.grp == 'sg' || slot.c.grp == 'psg');
});
} else {
index = _.findIndex(this.internal, function(slot) {
return slot.c && slot.c.grp == group;
});
}
if (index !== -1) {
return this.internal[index];
}
return null;
};
/**
* Will change the priority of the specified slot if the new priority is valid
* @param {object} slot The slot to be updated
* @param {number} newPriority The new priority to be set
* @return {boolean} Returns true if the priority was changed (within range)
*/
Ship.prototype.changePriority = function(slot, newPriority) {
if (newPriority >= 0 && newPriority < this.priorityBands.length) {
var oldPriority = slot.priority;
slot.priority = newPriority;
if (slot.enabled) { // Only update power if the slot is enabled
var usage = powerUsageType(slot, slot.c);
this.priorityBands[oldPriority][usage] -= slot.c.power;
this.priorityBands[newPriority][usage] += slot.c.power;
this.updatePower();
Ship.prototype.emptyWeapons = function() {
for (var i = this.hardpoints.length; i--; ) {
if (this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], null, null);
}
return true;
}
return false;
return this;
};
/**
* Optimize for the lower mass build that can still boost and power the ship
* without power management.
* @param {object} c Standard Component overrides
*/
Ship.prototype.optimizeMass = function(c) {
return this.emptyHardpoints().emptyInternal().useLightestStandard(c);
};
Ship.prototype.setCostIncluded = function(item, included) {
@@ -264,6 +294,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
this.totalCost += included ? item.discountedCost : -item.discountedCost;
}
item.incCost = included;
return this;
};
Ship.prototype.setSlotEnabled = function(slot, enabled) {
@@ -272,7 +303,7 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
if (slot.c) {
this.priorityBands[slot.priority][powerUsageType(slot, slot.c)] += enabled ? slot.c.power : -slot.c.power;
if (slot.c.grp == 'sg' || slot.c.grp == 'psg') {
if (slot.c.grp == 'sg' || slot.c.grp == 'psg' || slot.c.grp == 'bsg') {
this.updateShieldStrength();
} else if (slot.c.grp == 'sb') {
this.shieldMultiplier += slot.c.shieldmul * (enabled ? 1 : -1);
@@ -284,27 +315,14 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
this.updatePower();
}
}
};
Ship.prototype.getSlotStatus = function(slot, deployed) {
if (!slot.c) { // Empty Slot
return 0; // No Status (Not possible)
} else if (!slot.enabled) {
return 1; // Disabled
} else if (deployed && !slot.c.retractedOnly) { // Certain component (e.g. Detaild Surface scanner) are power only while retracted
return this.priorityBands[slot.priority].deployedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
// Active hardpoints have no retracted status
} else if ((deployed && slot.c.retractedOnly) || (slot.cat === 1 && !slot.c.passive)) {
return 0; // No Status (Not possible)
}
return this.priorityBands[slot.priority].retractedSum >= this.powerAvailable ? 2 : 3; // Offline : Online
return this;
};
/**
* Updates the ship's cumulative and aggregated stats based on the component change.
*/
Ship.prototype.updateStats = function(slot, n, old, preventUpdate) {
var powerChange = slot == this.common[0];
var powerChange = slot == this.standard[0];
if (old) { // Old component now being removed
switch (old.grp) {
@@ -375,9 +393,11 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
if (powerChange) {
this.updatePower();
}
this.updateTopSpeed();
this.updateJumpStats();
this.updateShieldStrength();
}
return this;
};
Ship.prototype.updatePower = function() {
@@ -390,50 +410,190 @@ angular.module('shipyard').factory('Ship', ['Components', 'calcShieldStrength',
prevDeployed = band.deployedSum = prevDeployed + band.deployed + band.retracted;
}
this.powerAvailable = this.common[0].c.pGen;
this.powerAvailable = this.standard[0].c.pGen;
this.powerRetracted = prevRetracted;
this.powerDeployed = prevDeployed;
return this;
};
Ship.prototype.updateTopSpeed = function() {
var speeds = calcSpeed(this.unladenMass + this.fuelCapacity, this.speed, this.boost, this.standard[1].c, this.pipSpeed);
this.topSpeed = speeds['4 Pips'];
this.topBoost = speeds.boost;
return this;
};
Ship.prototype.updateShieldStrength = function() {
var sgSlot = this.findInternalByGroup('sg'); // Find Shield Generator slot Index if any
this.shieldStrength = sgSlot && sgSlot.enabled ? calcShieldStrength(this.hullMass, this.baseShieldStrength, sgSlot.c, this.shieldMultiplier) : 0;
return this;
};
/**
* Jump Range and total range calculations
*/
Ship.prototype.updateJumpStats = function() {
var fsd = this.common[2].c; // Frame Shift Drive;
var fsd = this.standard[2].c; // Frame Shift Drive;
this.unladenRange = calcJumpRange(this.unladenMass + fsd.maxfuel, fsd, this.fuelCapacity); // Include fuel weight for jump
this.fullTankRange = calcJumpRange(this.unladenMass + this.fuelCapacity, fsd, this.fuelCapacity); // Full Tanke
this.ladenRange = calcJumpRange(this.ladenMass, fsd, this.fuelCapacity);
this.unladenTotalRange = calcTotalRange(this.unladenMass, fsd, this.fuelCapacity);
this.ladenTotalRange = calcTotalRange(this.unladenMass + this.cargoCapacity, fsd, this.fuelCapacity);
this.maxJumpCount = Math.ceil(this.fuelCapacity / fsd.maxfuel);
return this;
};
/**
* Update a slot with a the component if the id is different from the current id for this slot.
* Has logic handling components that you may only have 1 of (Shield Generator or Refinery).
*
* @param {object} slot The component slot
* @param {string} id Unique ID for the selected component
* @param {object} component Properties for the selected component
* @param {boolean} preventUpdate If true, do not update aggregated stats
*/
Ship.prototype.use = function(slot, id, component, preventUpdate) {
if (slot.id != id) { // Selecting a different component
// Slot is an internal slot, is not being emptied, and the selected component group/type must be of unique
if (slot.cat == 2 && component && _.includes(['bsg', 'psg', 'sg', 'rf', 'fs'], component.grp)) {
// Find another internal slot that already has this type/group installed
var similarSlot = this.findInternalByGroup(component.grp);
// If another slot has an installed component with of the same type
if (!preventUpdate && similarSlot && similarSlot !== slot) {
this.updateStats(similarSlot, null, similarSlot.c);
similarSlot.id = similarSlot.c = null; // Empty the slot
similarSlot.discountedCost = 0;
}
}
var oldComponent = slot.c;
slot.id = id;
slot.c = component;
slot.discountedCost = (component && component.cost) ? component.cost * this.componentCostMultiplier : 0;
this.updateStats(slot, component, oldComponent, preventUpdate);
}
return this;
};
/**
* Recalculate all item costs and total based on discounts.
* @param {number} shipCostMultiplier Ship cost multiplier discount (e.g. 0.9 === 10% discount)
* @param {number} componentCostMultiplier Component cost multiplier discount (e.g. 0.75 === 25% discount)
* [useBulkhead description]
* @param {[type]} index [description]
* @param {[type]} preventUpdate [description]
* @return {[type]} [description]
*/
Ship.prototype.applyDiscounts = function(shipCostMultiplier, componentCostMultiplier) {
var total = 0;
var costList = this.costList;
Ship.prototype.useBulkhead = function(index, preventUpdate) {
var oldBulkhead = this.bulkheads.c;
this.bulkheads.id = index;
this.bulkheads.c = Components.bulkheads(this.id, index);
this.bulkheads.discountedCost = this.bulkheads.c.cost * this.componentCostMultiplier;
this.armourMultiplier = ArmourMultiplier[index];
this.updateStats(this.bulkheads, this.bulkheads.c, oldBulkhead, preventUpdate);
for (var i = 0, l = costList.length; i < l; i++) {
var item = costList[i];
if (item.c && item.c.cost) {
item.discountedCost = item.c.cost * (item.type == 'SHIP' ? shipCostMultiplier : componentCostMultiplier);
if (item.incCost) {
total += item.discountedCost;
}
return this;
};
/**
* [useStandard description]
* @param {[type]} rating [description]
* @return {[type]} [description]
*/
Ship.prototype.useStandard = function(rating) {
for (var i = this.standard.length - 1; i--; ) { // All except Fuel Tank
var id = this.standard[i].maxClass + rating;
this.use(this.standard[i], id, Components.standard(i, id));
}
return this;
};
/**
* Use the lightest standard components unless otherwise specified
* @param {object} c Component overrides
*/
Ship.prototype.useLightestStandard = function(c) {
c = c || {};
var standard = this.standard,
pd = c.pd || this.availCS.lightestPowerDist(this.boostEnergy), // Find lightest Power Distributor that can still boost;
fsd = c.fsd || standard[2].maxClass + 'A',
ls = c.ls || standard[3].maxClass + 'D',
s = c.s || standard[5].maxClass + 'D',
updated;
this.useBulkhead(0)
.use(standard[2], fsd, Components.standard(2, fsd)) // FSD
.use(standard[3], ls, Components.standard(3, ls)) // Life Support
.use(standard[5], s, Components.standard(5, s)) // Sensors
.use(standard[4], pd, Components.standard(4, pd)); // Power Distributor
// Thrusters and Powerplant must be determined after all other components are mounted
// Loop at least once to determine absolute lightest PD and TH
do {
updated = false;
// Find lightest Thruster that still works for the ship at max mass
var th = c.th || this.availCS.lightestThruster(this.ladenMass);
if (th != standard[1].id) {
this.use(standard[1], th, Components.standard(1, th));
updated = true;
}
// Find lightest Power plant that can power the ship
var pp = c.pp || this.availCS.lightestPowerPlant(Math.max(this.powerRetracted, this.powerDeployed), c.ppRating);
if (pp != standard[0].id) {
this.use(standard[0], pp, Components.standard(0, pp));
updated = true;
}
} while (updated);
return this;
};
Ship.prototype.useUtility = function(group, rating, name, clobber) {
var component = Components.findHardpoint(group, 0, rating, name);
for (var i = this.hardpoints.length; i--; ) {
if ((clobber || !this.hardpoints[i].c) && !this.hardpoints[i].maxClass) {
this.use(this.hardpoints[i], component.id, component);
}
}
this.shipCostMultiplier = shipCostMultiplier;
this.componentCostMultiplier = componentCostMultiplier;
this.totalCost = total;
return this;
};
Ship.prototype.useWeapon = function(group, mount, clobber, missile) {
var hps = this.hardpoints;
for (var i = hps.length; i--; ) {
if (hps[i].maxClass) {
var size = hps[i].maxClass, component;
do {
component = Components.findHardpoint(group, size, null, null, mount, missile);
if ((clobber || !hps[i].c) && component) {
this.use(hps[i], component.id, component);
break;
}
} while (!component && (--size > 0));
}
}
return this;
};
/**
* Will change the priority of the specified slot if the new priority is valid
* @param {object} slot The slot to be updated
* @param {number} newPriority The new priority to be set
* @return {boolean} Returns true if the priority was changed (within range)
*/
Ship.prototype.changePriority = function(slot, newPriority) {
if (newPriority >= 0 && newPriority < this.priorityBands.length) {
var oldPriority = slot.priority;
slot.priority = newPriority;
if (slot.enabled) { // Only update power if the slot is enabled
var usage = powerUsageType(slot, slot.c);
this.priorityBands[oldPriority][usage] -= slot.c.power;
this.priorityBands[newPriority][usage] += slot.c.power;
this.updatePower();
}
return true;
}
return false;
};
return Ship;

View File

@@ -10,16 +10,17 @@ angular.module('shipyard', ['ngLodash'])
// Create 'angularized' references to DB. This will aid testing
.constant('ShipsDB', DB.ships)
.constant('ComponentsDB', DB.components)
.value('ArmourMultiplier', [
.constant('ArmourMultiplier', [
1, // Lightweight
1.4, // Reinforced
1.945, // Military
1.945, // Mirrored
1.945 // Reactive
])
.constant('SizeMap', ['', 'small', 'medium', 'large', 'capital'])
// Map to lookup group labels/names for component grp, used for JSON Serialization
.value('GroupMap', {
// Common
.constant('GroupMap', {
// Standard
pp: 'Power Plant',
t: 'Thrusters',
fsd: 'Frame Shift Drive',
@@ -33,17 +34,19 @@ angular.module('shipyard', ['ngLodash'])
sc: 'Scanner',
am: 'Auto Field-Maintenance Unit',
cr: 'Cargo Rack',
fi: 'FSD Interdictor',
fi: 'Frame Shift Drive Interdictor',
hb: 'Hatch Breaker Limpet Controller',
hr: 'Hull Reinforcement Package',
rf: 'Refinery',
scb: 'Shield Cell Bank',
sg: 'Shield Generator',
psg: 'Prismatic Shield Generator',
bsg: 'Bi-Weave Shield Generator',
dc: 'Docking Computer',
fx: 'Fuel Transfer Limpet Controller',
pc: 'Prospector Limpet Controller',
cc: 'Collector Limpet Controller',
pv: 'Planetary Vehicle Hangar',
// Hard Points
bl: 'Beam Laser',
@@ -64,7 +67,7 @@ angular.module('shipyard', ['ngLodash'])
sb: 'Shield Booster',
tp: 'Torpedo Pylon'
})
.value('MountMap', {
.constant('MountMap', {
'F': 'Fixed',
'G': 'Gimballed',
'T': 'Turret',
@@ -78,7 +81,7 @@ angular.module('shipyard', ['ngLodash'])
*
* @type {Array}
*/
.value('ShipFacets', [
.constant('ShipFacets', [
{ // 0
title: 'agility',
props: ['agility'],
@@ -87,10 +90,10 @@ angular.module('shipyard', ['ngLodash'])
},
{ // 1
title: 'speed',
props: ['speed', 'boost'],
props: ['topSpeed', 'topBoost'],
lbls: ['thrusters', 'boost'],
unit: 'm/s',
fmt: 'fRound'
fmt: 'fCrd'
},
{ // 2
title: 'armour',
@@ -161,8 +164,9 @@ angular.module('shipyard', ['ngLodash'])
/**
* Set of all available / theoretical discounts
*/
.value('Discounts', {
.constant('Discounts', {
'0%': 1,
'2.5%': 0.975,
'5%': 0.95,
'10%': 0.90,
'15%': 0.85,
@@ -204,7 +208,6 @@ angular.module('shipyard', ['ngLodash'])
/**
* Calculate the a ships shield strength based on mass, shield generator and shield boosters used.
*
* @private
* @param {number} mass Current mass of the ship
* @param {number} shields Base Shield strength MJ for ship
* @param {object} sg The shield generator used
@@ -212,30 +215,41 @@ angular.module('shipyard', ['ngLodash'])
* @return {number} Approximate shield strengh in MJ
*/
.value('calcShieldStrength', function(mass, shields, sg, multiplier) {
if (mass <= sg.minmass) {
var opt;
if (mass < sg.minmass) {
return shields * multiplier * sg.minmul;
}
if (mass > sg.maxmass) {
return shields * multiplier * sg.maxmul;
}
if (mass < sg.optmass) {
return shields * multiplier * (sg.minmul + (mass - sg.minmass) / (sg.optmass - sg.minmass) * (sg.optmul - sg.minmul));
opt = (sg.optmass - mass) / (sg.optmass - sg.minmass);
opt = 1 - Math.pow(1 - opt, 0.87);
return shields * multiplier * ((opt * sg.minmul) + ((1 - opt) * sg.optmul));
} else {
opt = (sg.optmass - mass) / (sg.maxmass - sg.optmass);
opt = -1 + Math.pow(1 + opt, 2.425);
return shields * multiplier * ( (-1 * opt * sg.maxmul) + ((1 + opt) * sg.optmul) );
}
if (mass < sg.maxmass) {
return shields * multiplier * (sg.optmul + (mass - sg.optmass) / (sg.maxmass - sg.optmass) * (sg.maxmul - sg.optmul));
}
return shields * multiplier * sg.maxmul;
})
/**
* Calculate the a ships speed based on mass, and thrusters. Currently Innacurate / Incomplete :(
* Calculate the a ships speed based on mass, and thrusters.
*
* @private
* @param {number} mass Current mass of the ship
* @param {number} baseSpeed Base speed m/s for ship
* @param {number} baseBoost Base boost m/s for ship
* @param {object} thrusters The shield generator used
* @return {object} Approximate speed and boost speed in m/s
* @param {number} baseBoost Base boost speed m/s for ship
* @param {object} thrusters The Thrusters used
* @param {number} pipSpeed Speed pip multiplier
* @return {object} Approximate speed by pips
*/
.value('calcSpeed', function(mass, baseSpeed, baseBoost) { //, thrusters) {
//var speed = baseSpeed * (1 + ((thrusters.optmass / mass) * 0.1 ) ); // TODO: find thruser coefficient(s)
//var boost = baseBoost * (1 + ((thrusters.optmass / mass) * 0.1 ) );
.value('calcSpeed', function(mass, baseSpeed, baseBoost, thrusters, pipSpeed) {
var multiplier = mass > thrusters.maxmass ? 0 : ((1 - thrusters.M) + (thrusters.M * Math.pow(3 - (2 * Math.max(0.5, mass / thrusters.optmass)), thrusters.P)));
var speed = baseSpeed * multiplier;
return { boost: baseSpeed, speed: baseBoost };
return {
'0 Pips': speed * (1 - (pipSpeed * 4)),
'2 Pips': speed * (1 - (pipSpeed * 2)),
'4 Pips': speed,
'boost': baseBoost * multiplier
};
});

View File

@@ -10,8 +10,8 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
return { name: 'Cargo Hatch', class: 1, rating: 'H', power: 0.6 };
};
this.common = function(typeIndex, componentId) {
return C.common[typeIndex][componentId];
this.standard = function(typeIndex, componentId) {
return C.standard[typeIndex][componentId];
};
this.hardpoints = function(id) {
@@ -38,61 +38,117 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
return null;
};
this.findInternalId = function(groupName, clss, rating, name) {
/**
* Finds an internal Component based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Advanced Discover Scanner'
* @return {String} The id of the component if found, null if not found
*/
this.findInternal = function(groupName, clss, rating, name) {
var groups = {};
if (groupName) {
var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && !C.internal[grpCode]) {
throw 'Invalid internal group: ' + groupName;
if (C.internal[groupName]) {
groups[groupName] = C.internal[groupName];
} else {
var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && C.internal[grpCode]) {
groups[grpCode] = C.internal[grpCode];
}
}
groups[grpCode] = C.internal[grpCode];
} else if (name) {
groups = C.internal;
} else {
throw 'Invalid group or name not provided';
}
for (var g in groups) {
var group = groups[g];
for (var i = 0, l = group.length; i < l; i++) {
if (group[i].class == clss && group[i].rating == rating && ((!name && !group[i].name) || group[i].name == name)) {
return group[i].id;
return group[i];
}
}
}
return 0;
return null;
};
this.findHardpointId = function(groupName, clss, rating, name, mode, missile) {
/**
* Finds an internal Component ID based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Advanced Discover Scanner'
* @return {String} The id of the component if found, null if not found
*/
this.findInternalId = function(groupName, clss, rating, name) {
var i = this.findInternal(groupName, clss, rating, name);
return i ? i.id : 0;
};
/**
* Finds a hardpoint Component based on Class, Rating, Group and/or name.
* At least one ofGroup name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating [Optional] Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Heat Sink Launcher'
* @param {string} mode Mount mode/type - [F]ixed, [G]imballed, [T]urret
* @param {string} missile [Optional] Missile type - [D]umbfire, [S]eeker
* @return {String} The id of the component if found, null if not found
*/
this.findHardpoint = function(groupName, clss, rating, name, mode, missile) {
var groups = {};
if (groupName) {
var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && !C.hardpoints[grpCode]) {
throw 'Invalid internal group: ' + groupName;
if (C.hardpoints[groupName]) {
groups[groupName] = C.hardpoints[groupName];
} else {
var grpCode = GrpNameToCodeMap[groupName];
if (grpCode && C.hardpoints[grpCode]) {
groups[grpCode] = C.hardpoints[grpCode];
}
}
groups[grpCode] = C.hardpoints[grpCode];
} else if (name) {
groups = C.hardpoints;
} else {
throw 'Invalid group or name not provided';
}
for (var g in groups) {
var group = groups[g];
for (var i = 0, l = group.length; i < l; i++) {
if (group[i].class == clss && group[i].rating == rating && group[i].mode == mode
if (group[i].class == clss && (!rating || group[i].rating == rating) && group[i].mode == mode
&& ((!name && !group[i].name) || group[i].name == name)
&& ((!missile && !group[i].missile) || group[i].missile == missile)
) {
return group[i].id;
return group[i];
}
}
}
return 0;
return null;
};
/**
* Finds a hardpoint Component ID based on Class, Rating, Group and/or name.
* At least one of Group name or unique component name must be provided
*
* @param {string} groupName [Optional] Full name or abbreviated name for component group
* @param {integer} clss Component Class
* @param {string} rating Component Rating
* @param {string} name [Optional] Long/unique name for component -e.g. 'Heat Sink Launcher'
* @param {string} mode Mount mode/type - [F]ixed, [G]imballed, [T]urret
* @param {string} missile [Optional] Missile type - [D]umbfire, [S]eeker
* @return {String} The id of the component if found, null if not found
*/
this.findHardpointId = function(groupName, clss, rating, name, mode, missile) {
var h = this.findHardpoint(groupName, clss, rating, name, mode, missile);
return h ? h.id : 0;
};
/**
@@ -119,7 +175,7 @@ angular.module('shipyard').service('Components', ['lodash', 'ComponentsDB', 'Shi
this.forShip = function(shipId) {
var ship = Ships[shipId];
var maxInternal = isNaN(ship.slots.internal[0]) ? ship.slots.internal[0].class : ship.slots.internal[0];
return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.common, maxInternal, ship.slots.hardpoints[0]);
return new ComponentSet(C, ship.minMassFilter || ship.properties.hullMass + 5, ship.slots.standard, maxInternal, ship.slots.hardpoints[0]);
};
}]);

View File

@@ -2,7 +2,7 @@
font-size: 0.8em;
padding: 0.25em 0.5em;
background: @primary-disabled;
text-transform: capitalize;
color: @primary-bg;
pointer-events: none;
}

View File

@@ -39,12 +39,14 @@ svg {
fill: @primary-disabled;
}
&.y {
text tspan:first-child {
fill: @primary;
}
}
}
.label {
text-transform: capitalize;
}
.metric {
text-transform: none;
}
.marker {
@@ -60,5 +62,6 @@ svg {
fill: @bgBlack;
stroke: @secondary;
stroke-width: 1px;
font-size: 0.75em
}
}

View File

@@ -1,16 +1,16 @@
@keyframes hideshow {
0% { opacity: 0; }
10% { opacity: 1; }
100% { opacity: 0; }
@keyframes outer {
0% { opacity: 0.3; }
20% { opacity: 1; }
100% { opacity: 0.3; }
}
@keyframes inner {
0% { opacity: 0; }
10% { opacity: 1; }
100% { opacity: 0; }
0% { opacity: 0.4; }
20% { opacity: 1; }
100% { opacity: 0.4; }
}
@animationTime: 750ms;
@animationTime: 1000ms;
@outerTriangles: 19;
@animationDelay: @animationTime / @outerTriangles;
@@ -23,11 +23,12 @@
}
}
.l1 { animation: hideshow @animationTime linear infinite; }
.l1 { animation: outer @animationTime linear infinite; }
.l2 { animation: inner @animationTime linear infinite; }
.mixin-loop (@i) when (@i > 0) {
.d@{i} {
opacity: @i / @outerTriangles;
animation-delay: @i * @animationDelay;
}
.mixin-loop(@i - 1);

View File

@@ -51,6 +51,32 @@
transform: scaleX(-1); /* standard */
}
.section-menu {
position: relative;
z-index: 0;
&.selected {
z-index: 1;
h1 {
background-color: @primary;
}
}
h1 {
cursor: pointer;
.icon {
float: right;
margin: 0.1em 0.3em 0 0;
}
}
.select {
box-sizing: border-box;
left: 0;
}
}
#build {
float: right;
line-height: 2em;
@@ -163,12 +189,6 @@ table.total {
.smallTablet({
width: 50%;
.axis.x {
g.tick:nth-child(2n + 1) text {
display: none;
}
}
});
.largePhone({
@@ -192,12 +212,12 @@ table.total {
&.third {
width: 33%;
.largePhone({
.smallTablet({
width: 100% !important;
});
}
.smallTablet({
.smallScreen({
.axis.x {
g.tick:nth-child(2n + 1) text {
display: none;
@@ -215,6 +235,19 @@ table.total {
stroke-width: 1px;
stroke: #000;
}
}
svg g {
.threshold {
stroke: @secondary-disabled !important;
fill: @secondary-disabled !important;
&.exceeded {
stroke: @warning !important;
fill: @warning !important;
}
}
}
#componentPriority {

View File

@@ -32,3 +32,9 @@
@rules();
}
}
.smallScreen(@rules) {
@media only screen and /*(min-width: 601px) and */(max-width: 1400px) {
@rules();
}
}

View File

@@ -87,7 +87,7 @@ select {
.lc, .c {
border:1px solid @primary-disabled;
padding: 0.1em 0.2em;
padding: 0.1em 0.25em;
margin: 0.3em;
&.warning {

View File

@@ -22,8 +22,8 @@
<div class="dbl" >
<div><ul ng-repeat="shipId in buildsList">
{{ships[shipId].properties.name}}
<li ng-repeat="(name, build) in allBuilds[shipId]">
<a ui-sref-active="active" class="name" ui-sref="outfit({shipId:shipId, code:build, bn:name})" ng-bind="name"></a>
<li ng-repeat="(i, name) in cleanedBuildList(shipId)">
<a ui-sref-active="active" class="name" ui-sref="outfit({shipId:shipId, code:allBuilds[shipId][name], bn:name})" ng-bind="name"></a>
</li>
</ul></div>
</div>
@@ -36,7 +36,7 @@
</div>
<div class="menu-list" ng-if="openedMenu=='comp'" ng-click="$event.stopPropagation();" style="white-space: nowrap;">
<span class="cap" ng-if="!bs.hasComparisons" translate="none created"></span>
<a ng-repeat="(name, comp) in allComparisons" ui-sref-active="active" class="block name" ui-sref="compare({name:name})" ng-bind="name"></a>
<a ng-repeat="(i, name) in allComparisons" ui-sref-active="active" class="block name" ui-sref="compare({name:name})" ng-bind="name"></a>
<hr />
<a ui-sref="compare({name: 'all'})" class="block cap" translate="compare all"></a>
<a ui-sref="compare({name: null})" class="block cap" translate="create new"></a>

View File

@@ -12,6 +12,6 @@
<div class="l" ng-if="hp.c.armourpen">{{'pen' | translate}}: {{hp.c.armourpen}}</div>
<div class="l" ng-if="hp.c.shieldmul">+{{$r.fRPct(hp.c.shieldmul)}}</div>
<div class="l" ng-if="hp.c.range">{{hp.c.range}} <u>km</u></div>
<div class="l" ng-if="hp.c.ammo">{{'ammo' | translate}}: {{$r.fCrd(hp.c.clip)}}/{{$r.fCrd(hp.c.ammo)}}</div>
<div class="l" ng-if="hp.c.ammo >= 0">{{'ammo' | translate}}: {{$r.fCrd(hp.c.clip)}}+{{$r.fCrd(hp.c.ammo)}}</div>
</div>
</div>

View File

@@ -7,8 +7,9 @@
<div class="l" ng-if="c.c.optmass">{{'optimal mass' | translate}}: {{c.c.optmass}} <u translate="T"></u></div>
<div class="l" ng-if="c.c.maxmass">{{'max mass' | translate}}: {{c.c.maxmass}} <u translate="T"></u></div>
<div class="l" ng-if="c.c.bins">{{c.c.bins}} <u translate="bins"></u></div>
<div class="l" ng-if="c.c.rate">{{'rate' | translate}}: {{c.c.rate}} <u>Kg/s</u>&nbsp;&nbsp;&nbsp;{{'refuel time' | translate}}: {{$r.fTime(fuel * 1000 / c.c.rate)}}</div>
<div class="l" ng-if="c.c.ammo">{{'ammo' | translate}}: {{c.c.ammo}}</div>
<div class="l" ng-if="c.c.rate">{{'rate' | translate}}: {{c.c.rate}} <u>kg/s</u>&nbsp;&nbsp;&nbsp;{{'refuel time' | translate}}: {{$r.fTime(fuel * 1000 / c.c.rate)}}</div>
<div class="l" ng-if="c.c.vehicles">{{'vehicles' | translate}}: {{c.c.vehicles}}</div>
<div class="l" ng-if="c.c.ammo">{{'ammo' | translate}}: {{$r.fCrd(c.c.ammo)}}</div>
<div class="l" ng-if="c.c.cells">{{'cells' | translate}}: {{c.c.cells}}</div>
<div class="l" ng-if="c.c.recharge">{{'recharge' | translate}}: {{c.c.recharge}} <u>MJ</u>&nbsp;&nbsp;&nbsp;{{'total' | translate}}: {{c.c.cells * c.c.recharge}} <u>MJ</u></div>
<div class="l" ng-if="c.c.repair">{{'repair' | translate}}: {{c.c.repair}}</div>

View File

@@ -15,7 +15,7 @@
<div ng-if="path" >Path:<br>{{path}}</div>
<div ng-if="type">Error:<br>{{type}}</div>
<div ng-if="errorMessage">Message:<pre>{{errorMessage}}</pre></div>
<div ng-if="details">Details:<br><pre>{{details}}<pre></div>
<div ng-if="details">Details:<br><pre>{{details}}</pre></div>
</div>
</div>
</div>

View File

@@ -13,15 +13,9 @@
<button class="danger" ng-click="deleteBuild()" ng-disabled="!savedCode">
<svg class="icon lg"><use xlink:href="#bin"></use></svg>
</button>
<button ui-sref="outfit({shipId: ship.id,code:null, bn: buildName})" ng-disabled="!code">
<button ng-click="resetBuild()" ng-disabled="!code">
<svg class="icon lg"><use xlink:href="#switch"></use></svg><span class="button-lbl" translate="reset"></span>
</button>
<button ng-click="aRatedBuild()">
<svg class="icon lg"><use xlink:href="#a"></use></svg><span class="button-lbl" translate="A-Rated"></span>
</button>
<button ng-click="optimizeMassBuild()">
<svg class="icon lg"><use xlink:href="#feather"></use></svg><span class="button-lbl" translate="optimize mass"></span>
</button>
<button ng-click="exportBuild($event)" ng-disabled="!buildName">
<svg class="icon lg"><use xlink:href="#download"></use></svg><span class="button-lbl" translate="export"></span>
</button>
@@ -60,26 +54,26 @@
</thead>
<tbody>
<tr>
<td class="cap" ng-bind="['','small','medium','large','capital'][ship.class] | translate"></td>
<td class="cap" ng-bind="SZM[ship.class] | translate"></td>
<td>{{ship.agility}}/10</td>
<td>
<span ng-if="th.c.maxmass >= ship.ladenMass">{{fRound(ship.speed)}} <u translate>m/s</u></span>
<span ng-if="th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topSpeed)}} <u translate>m/s</u></span>
<span class="warning" ng-if="th.c.maxmass < ship.ladenMass">0 <svg class="icon"><use xlink:href="#warning"></use></svg></span>
</td>
<td>
<span ng-if="pd.c.enginecapacity >= ship.boostEnergy && th.c.maxmass >= ship.ladenMass">{{fRound(ship.boost)}} <u translate>m/s</u></span>
<span ng-if="pd.c.enginecapacity >= ship.boostEnergy && th.c.maxmass >= ship.ladenMass">{{fCrd(ship.topBoost)}} <u translate>m/s</u></span>
<span class="warning" ng-if="pd.c.enginecapacity < ship.boostEnergy || th.c.maxmass < ship.ladenMass">0
<svg class="icon"><use xlink:href="#warning"></use></svg>
</span>
</td>
<td>{{fRound(ship.totalDps)}}</td>
<td>
{{ship.armour}}
{{fCrd(ship.armour)}}
<span ng-if="ship.armourAdded || ship.armourMultiplier > 1">
(<span ng-if="ship.armourMultiplier > 1">{{fRPct(ship.armourMultiplier)}}</span><span ng-if="ship.armourAdded && ship.armourMultiplier > 1">&nbsp;</span><span ng-if="ship.armourAdded">+ {{ship.armourAdded}}</span>)
</span>
</td>
<td>{{fRound(ship.shieldStrength)}} <u translate>MJ</u> <span ng-if="ship.shieldMultiplier > 1 && ship.shieldStrength > 0">({{fRPct(ship.shieldMultiplier)}})</span></td>
<td>{{fCrd(ship.shieldStrength)}} <u translate>MJ</u> <span ng-if="ship.shieldMultiplier > 1 && ship.shieldStrength > 0">({{fRPct(ship.shieldMultiplier)}})</span></td>
<td>{{ship.hullMass}} <u translate>T</u></td>
<td>{{fRound(ship.unladenMass)}} <u translate>T</u></td>
<td>{{fRound(ship.ladenMass)}} <u translate>T</u></td>
@@ -98,7 +92,27 @@
</div>
<div id="standard" class="group">
<h1 translate="standard"></h1>
<div class="section-menu" ng-class="{selected: selectedSlot=='standard'}" context-menu="optimizeStandard()" ng-click="selectSlot($event, 'standard')">
<h1>
{{'standard' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='standard'">
<ul>
<li class="lc" ng-click="optimizeStandard()" translate="Optimize"></li>
<li class="c" ng-click="useStandard('E')">E</li>
<li class="c" ng-click="useStandard('D')">D</li>
<li class="c" ng-click="useStandard('C')">C</li>
<li class="c" ng-click="useStandard('B')">B</li>
<li class="c" ng-click="useStandard('A')">A</li>
</ul>
<div class="select-group cap" translate="builds / roles"></div>
<ul>
<li class="lc" ng-click="optimizeCargo()" translate="Trader"></li>
<li class="lc" ng-click="optimizeExplorer()" translate="Explorer"></li>
</ul>
</div>
</div>
<div class="slot" ng-click="selectSlot($event, ship.bulkheads)" ng-class="{selected: selectedSlot==ship.bulkheads}">
<div class="details">
<div class="sz"><span>8</span></div>
@@ -125,7 +139,7 @@
<div class="l cap">{{'efficiency' | translate}}: {{pp.c.eff}}</div>
<div class="l cap">{{'power' | translate}}: {{pp.c.pGen}} <u translate>MW</u></div>
</div>
<div component-select class="select" s="pp" warning="ppWarning" opts="availCS.common[0]" ng-if="selectedSlot==pp" ng-click="select('c',pp,$event)"></div>
<div component-select class="select" s="pp" warning="ppWarning" opts="availCS.standard[0]" ng-if="selectedSlot==pp" ng-click="select('c',pp,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, th)" ng-class="{selected: selectedSlot==th}">
<div class="details" ng-class="{'warning': th.c.maxmass < ship.ladenMass}">
@@ -136,7 +150,7 @@
<div class="l">{{'optimal mass' | translate}}: {{th.c.optmass}} <u translate>T</u></div>
<div class="l">{{'max mass' | translate}}: {{th.c.maxmass}} <u translate>T</u></div>
</div>
<div component-select class="select" s="th" mass="ship.ladenMass" opts="availCS.common[1]" ng-if="selectedSlot==th" ng-click="select('c',th,$event)"></div>
<div component-select class="select" s="th" mass="ship.ladenMass" opts="availCS.standard[1]" ng-if="selectedSlot==th" ng-click="select('c',th,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, fsd)" ng-class="{selected: selectedSlot==fsd}">
<div class="details">
@@ -147,7 +161,7 @@
<div class="l cap">{{'optimal mass' | translate}}: {{fsd.c.optmass}} <u translate>T</u></div>
<div class="l cap">{{'max' | translate}} {{'fuel' | translate}}: {{fsd.c.maxfuel}} <u translate>T</u></div>
</div>
<div component-select class="select" s="fsd" opts="availCS.common[2]" ng-if="selectedSlot==fsd" ng-click="select('c',fsd,$event)"></div>
<div component-select class="select" s="fsd" opts="availCS.standard[2]" ng-if="selectedSlot==fsd" ng-click="select('c',fsd,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, ls)" ng-class="{selected: selectedSlot==ls}">
<div class="details">
@@ -157,7 +171,7 @@
<div class="cb"></div>
<div class="l cap">{{'time' | translate}}: {{fTime(ls.c.time)}}</div>
</div>
<div component-select class="select" s="ls" opts="availCS.common[3]" ng-if="selectedSlot==ls" ng-click="select('c',ls,$event)"></div>
<div component-select class="select" s="ls" opts="availCS.standard[3]" ng-if="selectedSlot==ls" ng-click="select('c',ls,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, pd)" ng-class="{selected: selectedSlot==pd}">
<div class="details" ng-class="{warning: pd.c.enginecapacity < ship.boostEnergy}">
@@ -169,7 +183,7 @@
<div class="l">{{'SYS' | translate}}: {{pd.c.systemcapacity}} <u translate>MJ</u> / {{pd.c.systemrecharge}} <u translate>MW</u></div>
<div class="l">{{'ENG' | translate}}: {{pd.c.enginecapacity}} <u translate>MJ</u> / {{pd.c.enginerecharge}} <u translate>MW</u></div>
</div>
<div component-select class="select" s="pd" warning="pdWarning" opts="availCS.common[4]" ng-if="selectedSlot==pd" ng-click="select('c',pd,$event)"></div>
<div component-select class="select" s="pd" warning="pdWarning" opts="availCS.standard[4]" ng-if="selectedSlot==pd" ng-click="select('c',pd,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, ss)" ng-class="{selected: selectedSlot==ss}">
<div class="details">
@@ -179,7 +193,7 @@
<div class="cb"></div>
<div class="l cap">{{'range' | translate}}: {{ss.c.range}} <u translate>km</u></div>
</div>
<div component-select class="select" s="ss" opts="availCS.common[5]" ng-if="selectedSlot==ss" ng-click="select('c',ss,$event)"></div>
<div component-select class="select" s="ss" opts="availCS.standard[5]" ng-if="selectedSlot==ss" ng-click="select('c',ss,$event)"></div>
</div>
<div class="slot" ng-click="selectSlot($event, ft)" ng-class="{selected: selectedSlot==ft}">
<div class="details">
@@ -187,12 +201,25 @@
<div class="l">{{ft.id}} {{'ft' | translate}}</div>
<div class="r">{{ft.c.capacity}} <u translate>T</u></div>
</div>
<div component-select class="select" s="ft" opts="availCS.common[6]" ng-if="selectedSlot==ft" ng-click="select('c',ft,$event)"></div>
<div component-select class="select" s="ft" opts="availCS.standard[6]" ng-if="selectedSlot==ft" ng-click="select('c',ft,$event)"></div>
</div>
</div>
<div id="internal" class="group">
<h1 translate="internal compartments"></h1>
<div class="section-menu" ng-class="{selected: selectedSlot=='internal'}" context-menu="emptyInternal()" ng-click="selectSlot($event, 'internal')">
<h1>
{{'internal compartments' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='internal'">
<ul>
<li class="lc" ng-click="emptyInternal()" translate="empty all"></li>
<li class="lc" ng-click="fillWithCargo()" translate="cargo"></li>
<li class="lc" ng-click="fillWithCells()" translate="scb"></li>
<li class="lc" ng-click="fillWithArmor()" translate="hr"></li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="i in ship.internal" ng-click="selectSlot($event, i)" context-menu="select('i', i, $event, 'empty')" ng-class="{selected: selectedSlot==i}">
<div slot-internal class="details" slot="i" fuel="ship.fuelCapacity"></div>
<div class="select" ng-if="selectedSlot==i" ng-click="select('i',i,$event)">
@@ -202,7 +229,47 @@
</div>
<div id="hardpoints" class="group">
<h1 translate="hardpoints"></h1>
<div class="section-menu" ng-class="{selected: selectedSlot=='hardpoints'}" context-menu="emptyHardpoints()" ng-click="selectSlot($event, 'hardpoints')">
<h1>
{{'hardpoints' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select hardpoint" ng-if="selectedSlot=='hardpoints'">
<ul>
<li class="lc" ng-click="emptyHardpoints()" translate="empty all"></li>
</ul>
<div class="select-group cap" translate="pl"></div>
<ul>
<li class="c" ng-click="useHardpoint('pl','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('pl','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('pl','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="ul"></div>
<ul>
<li class="c" ng-click="useHardpoint('ul','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('ul','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('ul','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="bl"></div>
<ul>
<li class="c" ng-click="useHardpoint('bl','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('bl','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('bl','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="mc"></div>
<ul>
<li class="c" ng-click="useHardpoint('mc','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('mc','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('mc','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
<div class="select-group cap" translate="c"></div>
<ul>
<li class="c" ng-click="useHardpoint('c','F')"><svg class="icon lg"><use xlink:href="#mount-F"></use></svg></li>
<li class="c" ng-click="useHardpoint('c','G')"><svg class="icon lg"><use xlink:href="#mount-G"></use></svg></li>
<li class="c" ng-click="useHardpoint('c','T')"><svg class="icon lg"><use xlink:href="#mount-T"></use></svg></li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '!0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}">
<div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div>
<div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)">
@@ -212,7 +279,29 @@
</div>
<div id="utility" class="group">
<h1 translate="utility mounts"></h1>
<div class="section-menu" ng-class="{selected: selectedSlot=='utility'}" context-menu="emptyUtility()" ng-click="selectSlot($event, 'utility')">
<h1>
{{'utility mounts' | translate}}
<svg class="icon"><use xlink:href="#equalizer"></use></svg>
</h1>
<div class="select" ng-if="selectedSlot=='utility'">
<ul>
<li class="lc" ng-click="emptyUtility()" translate="empty all"></li>
</ul>
<div class="select-group cap" translate="sb"></div>
<ul>
<li class="c" ng-click="useUtility('sb','E')">E</li>
<li class="c" ng-click="useUtility('sb','D')">D</li>
<li class="c" ng-click="useUtility('sb','C')">C</li>
<li class="c" ng-click="useUtility('sb','B')">B</li>
<li class="c" ng-click="useUtility('sb','A')">A</li>
</ul>
<div class="select-group cap" translate="Heat Sink Launcher"></div>
<ul>
<li class="lc" ng-click="useUtility('cm',null,'Heat Sink Launcher')" translate="Heat Sink Launcher"></li>
</ul>
</div>
</div>
<div class="slot" ng-repeat="h in ship.hardpoints | filter:{maxClass: '0'}" ng-click="selectSlot($event, h)" context-menu="select('h', h, $event, 'empty')" ng-class="{selected: selectedSlot==h}">
<div slot-hardpoint class="details" hp="h" size="HPC[h.maxClass]"></div>
<div class="select" ng-class="{hardpoint: h.maxClass > 0}" ng-if="selectedSlot==h" ng-click="select('h',h,$event)">
@@ -229,8 +318,8 @@
<th style="width:3em;" class="sortable" ng-click="sortPwr('type')" translate="TYPE"></th>
<th style="width:4em;" class="sortable" ng-click="sortPwr('priority')" translate="PRI"></th>
<th colspan="2" class="sortable" ng-click="sortPwr('c.power')" translate="PWR"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusRetracted)" translate="RET"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusDeployed)" translate="DEP"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusRetracted)" translate="ret"></th>
<th style="width:3em;" class="sortable" ng-click="sortPwr(statusDeployed)" translate="dep"></th>
</tr>
</thead>
<tbody>
@@ -250,11 +339,19 @@
<td class="le shorten cap" ng-click="togglePwr(c)" ng-bind="cName(c)"></td>
<td ng-click="togglePwr(c)"><u ng-bind="c.type | translate"></u></td>
<td><span ng-click="decPriority(c)" class="flip">&#9658;</span> {{c.priority + 1}} <span ng-click="incPriority(c)">&#9658;</span></td>
<td class="ri" style="width:3.25em;">{{fPwr(c.c.power)}}</td>
<td class="ri" style="width:3em;"><u>{{f1Pct(c.c.power/ship.powerAvailable)}}</u></td>
<td ng-if="!c.enabled" class="disabled upp" colspan="2" translate="disabled"></td>
<td class="upp" ng-if="c.enabled" ng-class="STATUS_CLASS[statusRetracted(c)]">{{STATUS[statusRetracted(c)] | translate}}</td>
<td class="upp" ng-if="c.enabled" ng-class="STATUS_CLASS[statusDeployed(c)]">{{STATUS[statusDeployed(c)] | translate}}</td>
<td class="ri" style="width:3.25em;" ng-click="togglePwr(c)">{{fPwr(c.c.power)}}</td>
<td class="ri" style="width:3em;" ng-click="togglePwr(c)"><u>{{f1Pct(c.c.power/ship.powerAvailable)}}</u></td>
<td ng-if="!c.enabled" class="disabled upp" colspan="2" translate="disabled" ng-click="togglePwr(c)"></td>
<td class="upp" ng-if="c.enabled" ng-click="togglePwr(c)">
<svg class="icon secondary-disabled" ng-if="statusRetracted(c) == 3"><use xlink:href="#power"><title class="cap">{{'on' | translate}}</title></use></svg>
<svg class="icon warning" ng-if="statusRetracted(c) == 2"><use xlink:href="#no-power"><title class="cap">{{'off' | translate}}</title></use></svg>
<span class="disabled" translate="disabled" ng-if="statusRetracted(c) == 1"></span>
</td>
<td class="upp" ng-if="c.enabled" ng-click="togglePwr(c)">
<svg class="icon secondary-disabled" ng-if="statusDeployed(c) == 3"><use xlink:href="#power"><title class="cap">{{'on' | translate}}</title></use></svg>
<svg class="icon warning" ng-if="statusDeployed(c) == 2"><use xlink:href="#no-power"><title class="cap">{{'off' | translate}}</title></use></svg>
<span class="disabled" translate="disabled" ng-if="statusDeployed(c) == 1"></span>
</td>
</tr>
</tbody>
</table>
@@ -265,8 +362,9 @@
<table class="tabs">
<thead>
<tr>
<th style="width:50%" ng-class="{active: costTab == 'retrofit'}" ng-click="updateCostTab('retrofit')" translate="retrofit costs"></th>
<th style="width:50%" ng-class="{active: costTab == 'costs'}" ng-click="updateCostTab('costs')" translate="costs"></th>
<th style="width:34%" ng-class="{active: costTab == 'ammo'}" ng-click="updateCostTab('ammo')" translate="reload costs"></th>
<th style="width:33%" ng-class="{active: costTab == 'retrofit'}" ng-click="updateCostTab('retrofit')" translate="retrofit costs"></th>
<th style="width:33%" ng-class="{active: costTab == 'costs'}" ng-click="updateCostTab('costs')" translate="costs"></th>
</tr>
</thead>
</table>
@@ -311,7 +409,7 @@
<th colspan="2" class="sortable le" ng-click="sortRetrofit('sellName | translate')" translate="sell"></th>
<th colspan="2" class="sortable le" ng-click="sortRetrofit('buyName | translate')" translate="buy"></th>
<th class="sortable le" ng-click="sortRetrofit('netCost')">
{{'net cost' | translate}} <u class="optional-hide" ng-if="discounts.components < 1">-[{{fRPct(1 - discounts.components)}}]</u>
{{'net cost' | translate}} <u class="optional-hide" ng-if="discounts.components < 1">[-{{fRPct(1 - discounts.components)}}]</u>
</th>
</tr>
</thead>
@@ -319,12 +417,12 @@
<tr ng-if="!retrofitList || retrofitList.length == 0">
<td colspan="5" style="padding: 3em 0;" translate="PHRASE_NO_RETROCH"></td>
</tr>
<tr class="highlight" ng-repeat="item in retrofitList | orderBy:retroPredicate:retroDesc">
<td style="width:1em;">{{item.sellClassRating}}</td>
<tr class="highlight" ng-repeat="item in retrofitList | orderBy:retroPredicate:retroDesc" ng-click="toggleRetrofitCost(item.retroItem)" ng-class="{disabled: !item.retroItem.incCost}">
<td style="width:1em;">{{item.sellClassRating}}</td>
<td class="le shorten cap">{{item.sellName | translate}}</td>
<td style="width:1em;">{{item.buyClassRating}}</td>
<td class="le shorten cap">{{item.buyName | translate}}</td>
<td class="ri" ng-class="item.netCost > 0 ? 'warning' : 'secondary-disabled'">{{ fCrd(item.netCost)}} <u translate>CR</u></td>
<td class="ri" ng-class="item.retroItem.incCost ? item.netCost > 0 ? 'warning' : 'secondary-disabled' : 'disabled'">{{ fCrd(item.netCost)}} <u translate>CR</u></td>
</tr>
</tbody>
</table>
@@ -346,24 +444,55 @@
</tr>
</table>
</div>
<div ng-if="costTab == 'ammo'">
<div class="scroll-x">
<table style="width:100%">
<thead>
<tr class="main">
<th colspan="2" class="sortable le" ng-click="sortAmmo('ammoName | translate')" translate="component"></th>
<th colspan="1" class="sortable le" ng-click="sortAmmo('ammoMax')" translate="quantity"></th>
<th colspan="1" class="sortable le" ng-click="sortAmmo('ammoUnitCost')" translate="unit cost"></th>
<th class="sortable le" ng-click="sortAmmo('ammoTotalCost')">
{{'total cost' | translate}} <u class="optional-hide" ng-if="discounts.ammo < 1">-[{{fRPct(1 - discounts.ammo)}}]</u>
</th>
</tr>
</thead>
<tbody>
<tr class="highlight" ng-repeat="item in ammoList | orderBy:ammoPredicate:ammoDesc">
<td style="width:1em;">{{item.ammoClassRating}}</td>
<td class="le shorten cap">{{item.ammoName | translate}}</td>
<td class="ri">{{fCrd(item.ammoMax)}}</td>
<td class="ri">{{fCrd(item.ammoUnitCost)}} <u translate>CR</u></td>
<td class="ri">{{fCrd(item.ammoTotalCost)}} <u translate>CR</u></td>
</tr>
</tbody>
</table>
</div>
<table class="total">
<tr class="ri">
<td class="lbl" translate="total"></td>
<td>{{fCrd(ammoTotal)}} <u translate>CR</u></td>
</tr>
</table>
</div>
</div>
<div class="group half">
<div class="group third">
<h1 translate="jump range"></h1>
<div line-chart config="jrChart" series="jrSeries"></div>
</div>
<div class="group half">
<div class="group third">
<h1 translate="total range"></h1>
<div line-chart config="trChart" series="trSeries"></div>
</div>
<!-- TODO: Add back in once calcSpeed is dynamic and accurate
<div class="group third">
<h1 translate="speed"></h1>
<div line-chart config="speedChart" series="speedSeries"></div>
</div>
-->
<div class="group half">
<div slider max="ship.fuelCapacity" unit="'T'" on-change="::fuelChange(val)" style="position:relative; margin: 0 auto;">

View File

@@ -1,9 +1,89 @@
<div id="shipyard">
<a ui-sref="outfit({shipId:id})" class="ship" ng-repeat="(id,s) in ships">
<h2 ng-bind="s.properties.name"></h2>
<div class="subtitle">
<small ng-bind="s.properties.manufacturer"></small>
</div>
{{fCrd(s.retailCost)}} <u>CR</u>
</a>
<div class="scroll-x">
<table align="center" style="font-size:0.85em;white-space:nowrap">
<thead>
<tr class="main">
<th rowspan="2" class="sortable le" ng-click="sortShips('name')" translate="ship"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('manufacturer')" translate="manufacturer"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('class')" translate="size"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('agility')" translate="agility"></th>
<th colspan="4" translate="base"></th>
<th colspan="4" translate="max"></th>
<th colspan="5" class="sortable" ng-click="sortShips('hpCount')" translate="hardpoints"></th>
<th colspan="8" class="sortable" ng-click="sortShips('intCount')" translate="internal compartments"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('hullMass')" translate="hull"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('masslock')" translate="MLF"></th>
<th rowspan="2" class="sortable" ng-click="sortShips('retailCost')" translate="cost"></th>
</tr>
<tr>
<!-- Base -->
<th class="sortable lft" ng-click="sortShips('speed')" translate="speed"></th>
<th class="sortable" ng-click="sortShips('boost')" translate="boost"></th>
<th class="sortable" ng-click="sortShips('baseArmour')" translate="armour"></th>
<th class="sortable" ng-click="sortShips('baseShieldStrength')" translate="shields"></th>
<!-- Max -->
<th class="sortable lft" ng-click="sortShips('topSpeed')" translate="speed"></th>
<th class="sortable " ng-click="sortShips('topBoost')" translate="boost"></th>
<th class="sortable " ng-click="sortShips('maxJumpRange')" translate="jump"></th>
<th class="sortable" ng-click="sortShips('maxCargo')" translate="cargo"></th>
<!-- Hardpoints -->
<th class="sortable lft" ng-click="sortShips('hp[1]')" translate="S"></th>
<th class="sortable" ng-click="sortShips('hp[2]')" translate="M"></th>
<th class="sortable" ng-click="sortShips('hp[3]')" translate="L"></th>
<th class="sortable" ng-click="sortShips('hp[4]')" translate="H"></th>
<th class="sortable" ng-click="sortShips('hp[0]')" translate="U"></th>
<!-- Internal -->
<th class="sortable lft" ng-click="sortShips('int[0]')" translate="1"></th>
<th class="sortable" ng-click="sortShips('int[1]')" translate="2"></th>
<th class="sortable" ng-click="sortShips('int[2]')" translate="3"></th>
<th class="sortable" ng-click="sortShips('int[3]')" translate="4"></th>
<th class="sortable" ng-click="sortShips('int[4]')" translate="5"></th>
<th class="sortable" ng-click="sortShips('int[5]')" translate="6"></th>
<th class="sortable" ng-click="sortShips('int[6]')" translate="7"></th>
<th class="sortable" ng-click="sortShips('int[7]')" translate="8"></th>
</tr>
</thead>
<tbody>
<tr class="highlight" ng-repeat="s in shipsOverview | orderBy:shipPredicate:shipDesc">
<td class="le"><a ui-sref="outfit({shipId: s.id})" ng-bind="s.name"></a></td>
<td class="le" ng-bind="s.manufacturer"></td>
<!-- Pad Size -->
<td class="cap" ng-bind="SZM[s.class] | translate"></td>
<td class="ri" ng-bind="s.agility"></td>
<!-- Base -->
<td class="ri">{{fCrd(s.speed)}} <u translate>m/s</u></td>
<td class="ri">{{fCrd(s.boost)}} <u translate>m/s</u></td>
<td class="ri" ng-bind="s.baseArmour"></td>
<td class="ri">{{fCrd(s.baseShieldStrength)}} <u translate>Mj</u></td>
<!-- Max -->
<td class="ri">{{fCrd(s.topSpeed)}} <u translate>m/s</u></td>
<td class="ri">{{fCrd(s.topBoost)}} <u translate>m/s</u></td>
<td class="ri">{{fRound(s.maxJumpRange)}} <u translate>LY</u></td>
<td class="ri">{{fCrd(s.maxCargo)}} <u translate>T</u></td>
<!-- Hardpoints -->
<td ng-bind="s.hp[1]" ng-class="{disabled: !s.hp[1]}"></td>
<td ng-bind="s.hp[2]" ng-class="{disabled: !s.hp[2]}"></td>
<td ng-bind="s.hp[3]" ng-class="{disabled: !s.hp[3]}"></td>
<td ng-bind="s.hp[4]" ng-class="{disabled: !s.hp[4]}"></td>
<td ng-bind="s.hp[0]" ng-class="{disabled: !s.hp[0]}"></td>
<!-- Internal -->
<td ng-bind="s.int[0]" ng-class="{disabled: !s.int[0]}"></td>
<td ng-bind="s.int[1]" ng-class="{disabled: !s.int[1]}"></td>
<td ng-bind="s.int[2]" ng-class="{disabled: !s.int[2]}"></td>
<td ng-bind="s.int[3]" ng-class="{disabled: !s.int[3]}"></td>
<td ng-bind="s.int[4]" ng-class="{disabled: !s.int[4]}"></td>
<td ng-bind="s.int[5]" ng-class="{disabled: !s.int[5]}"></td>
<td ng-bind="s.int[6]" ng-class="{disabled: !s.int[6]}"></td>
<td ng-bind="s.int[7]" ng-class="{disabled: !s.int[7]}"></td>
<!-- Other Stats -->
<td class="ri">{{fCrd(s.hullMass)}} <u translate>T</u></td>
<td class="ri" ng-bind="s.masslock"></td>
<td class="ri">{{fCrd(s.retailCost)}} <u translate>CR</u></td>
</tr>
</tbody>
</table>
</div>
</div>

1
data Submodule

Submodule data added at bb316e77b2

View File

@@ -1,853 +0,0 @@
{
"sidewinder": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 25600,
"mass": 2
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 80320,
"mass": 4
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 132064,
"mass": 4
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 139424,
"mass": 4
}
],
"diamondback": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 225700,
"mass": 13
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 507900,
"mass": 26
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 1185100,
"mass": 26
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 1330100,
"mass": 26
}
],
"diamondback_explorer": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 800000,
"mass": 23
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 1800000,
"mass": 47
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 4200000,
"mass": 26
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 4714000,
"mass": 47
}
],
"imperial_courier": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 1017200,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 2288600,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 5408800,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 5993700,
"mass": 8
}
],
"cobra_mk_iii": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 151887,
"mass": 14
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 341746,
"mass": 27
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 797407,
"mass": 27
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 894995,
"mass": 27
}
],
"imperial_clipper": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 8918344,
"mass": 30
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 20066274,
"mass": 60
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 47423294,
"mass": 60
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 52551342,
"mass": 60
}
],
"imperial_eagle": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 66500,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 222765,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 346555,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 372044,
"mass": 8
}
],
"federal_assault_ship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 7925682,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 17832784,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 42144814,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 46702081,
"mass": 87
}
],
"federal_dropship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 7925682,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 17832784,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 42144814,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 46702081,
"mass": 87
}
],
"federal_gunship": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 14325688,
"mass": 44
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 32232788,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 76176811,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 84414088,
"mass": 87
}
],
"python": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 22791271,
"mass": 26
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 51280361,
"mass": 53
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 121192586,
"mass": 53
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 134297567,
"mass": 53
}
],
"anaconda": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 58787780,
"mass": 30
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 132272505,
"mass": 60
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 312604021,
"mass": 60
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 346406995,
"mass": 60
}
],
"eagle": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 26880,
"mass": 4
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 90048,
"mass": 8
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 140089,
"mass": 8
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 150393,
"mass": 8
}
],
"viper": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 57172,
"mass": 5
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 128637,
"mass": 9
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 304014,
"mass": 9
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 336888,
"mass": 9
}
],
"vulture": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 1970246,
"mass": 17
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 4433054,
"mass": 35
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 10476783,
"mass": 35
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 11609675,
"mass": 35
}
],
"fer_de_lance": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 20626816,
"mass": 19
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 46410336,
"mass": 38
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 109683094,
"mass": 38
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 121543513,
"mass": 38
}
],
"hauler": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 42176,
"mass": 1
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 185047,
"mass": 2
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 270295,
"mass": 2
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 282421,
"mass": 2
}
],
"type_6_transporter": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 418378,
"mass": 12
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 941350,
"mass": 23
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 2224725,
"mass": 23
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 2465292,
"mass": 23
}
],
"type_7_transport": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 6988901,
"mass": 32
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 15725027,
"mass": 63
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 37163481,
"mass": 63
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 41182099,
"mass": 63
}
],
"type_9_heavy": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 30622336,
"mass": 75
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 68900257,
"mass": 150
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 162834275,
"mass": 150
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 180442119,
"mass": 150
}
],
"adder": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 35123,
"mass": 3
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 79027,
"mass": 5
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 186767,
"mass": 5
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 206963,
"mass": 5
}
],
"asp": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 2664461,
"mass": 21
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 5995038,
"mass": 42
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 14168273,
"mass": 42
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 15700338,
"mass": 42
}
],
"orca": [
{
"name": "Lightweight Alloy",
"class": 1,
"rating": "I",
"cost": 0,
"mass": 0
},
{
"name": "Reinforced Alloy",
"class": 1,
"rating": "I",
"cost": 19415954,
"mass": 21
},
{
"name": "Military Grade Composite",
"class": 1,
"rating": "I",
"cost": 43685898,
"mass": 87
},
{
"name": "Mirrored Surface Composite",
"class": 1,
"rating": "I",
"cost": 103244339,
"mass": 87
},
{
"name": "Reactive Surface Composite",
"class": 1,
"rating": "I",
"cost": 114408513,
"mass": 87
}
]
}

View File

@@ -1,302 +0,0 @@
{
"6E": {
"grp": "fd",
"class": 6,
"rating": "E",
"cost": 199747,
"mass": 40,
"power": 0.4,
"optmass": 960,
"maxfuel": 5.3,
"fuelmul": 0.011,
"fuelpower": 2.6
},
"6D": {
"grp": "fd",
"class": 6,
"rating": "D",
"cost": 599242,
"mass": 16,
"power": 0.45,
"optmass": 1080,
"maxfuel": 5.3,
"fuelmul": 0.01,
"fuelpower": 2.6
},
"6C": {
"grp": "fd",
"class": 6,
"rating": "C",
"cost": 1797726,
"mass": 40,
"power": 0.5,
"optmass": 1200,
"maxfuel": 5.3,
"fuelmul": 0.008,
"fuelpower": 2.6
},
"6B": {
"grp": "fd",
"class": 6,
"rating": "B",
"cost": 5393177,
"mass": 64,
"power": 0.63,
"optmass": 1500,
"maxfuel": 6.6,
"fuelmul": 0.01,
"fuelpower": 2.6
},
"6A": {
"grp": "fd",
"class": 6,
"rating": "A",
"cost": 16179531,
"mass": 40,
"power": 0.75,
"optmass": 1800,
"maxfuel": 8,
"fuelmul": 0.012,
"fuelpower": 2.6
},
"5E": {
"grp": "fd",
"class": 5,
"rating": "E",
"cost": 63013,
"mass": 20,
"power": 0.32,
"optmass": 560,
"maxfuel": 3.3,
"fuelmul": 0.011,
"fuelpower": 2.45
},
"5D": {
"grp": "fd",
"class": 5,
"rating": "D",
"cost": 189036,
"mass": 8,
"power": 0.36,
"optmass": 630,
"maxfuel": 3.3,
"fuelmul": 0.01,
"fuelpower": 2.45
},
"5C": {
"grp": "fd",
"class": 5,
"rating": "C",
"cost": 567106,
"mass": 20,
"power": 0.4,
"optmass": 700,
"maxfuel": 3.3,
"fuelmul": 0.008,
"fuelpower": 2.45
},
"5B": {
"grp": "fd",
"class": 5,
"rating": "B",
"cost": 1701318,
"mass": 32,
"power": 0.5,
"optmass": 875,
"maxfuel": 4.1,
"fuelmul": 0.01,
"fuelpower": 2.45
},
"5A": {
"grp": "fd",
"class": 5,
"rating": "A",
"cost": 5103953,
"mass": 20,
"power": 0.6,
"optmass": 1050,
"maxfuel": 5,
"fuelmul": 0.012,
"fuelpower": 2.45
},
"4E": {
"grp": "fd",
"class": 4,
"rating": "E",
"cost": 19878,
"mass": 10,
"power": 0.24,
"optmass": 280,
"maxfuel": 2,
"fuelmul": 0.011,
"fuelpower": 2.3
},
"4D": {
"grp": "fd",
"class": 4,
"rating": "D",
"cost": 59633,
"mass": 4,
"power": 0.27,
"optmass": 315,
"maxfuel": 2,
"fuelmul": 0.01,
"fuelpower": 2.3
},
"4C": {
"grp": "fd",
"class": 4,
"rating": "C",
"cost": 178898,
"mass": 10,
"power": 0.3,
"optmass": 350,
"maxfuel": 2,
"fuelmul": 0.008,
"fuelpower": 2.3
},
"4B": {
"grp": "fd",
"class": 4,
"rating": "B",
"cost": 536693,
"mass": 16,
"power": 0.38,
"optmass": 438,
"maxfuel": 2.5,
"fuelmul": 0.01,
"fuelpower": 2.3
},
"4A": {
"grp": "fd",
"class": 4,
"rating": "A",
"cost": 1610080,
"mass": 10,
"power": 0.45,
"optmass": 525,
"maxfuel": 3,
"fuelmul": 0.012,
"fuelpower": 2.3
},
"3E": {
"grp": "fd",
"class": 3,
"rating": "E",
"cost": 6271,
"mass": 5,
"power": 0.24,
"optmass": 80,
"maxfuel": 1.2,
"fuelmul": 0.011,
"fuelpower": 2.15
},
"3D": {
"grp": "fd",
"class": 3,
"rating": "D",
"cost": 18812,
"mass": 2,
"power": 0.27,
"optmass": 90,
"maxfuel": 1.2,
"fuelmul": 0.01,
"fuelpower": 2.15
},
"3C": {
"grp": "fd",
"class": 3,
"rating": "C",
"cost": 56435,
"mass": 5,
"power": 0.3,
"optmass": 100,
"maxfuel": 1.2,
"fuelmul": 0.008,
"fuelpower": 2.15
},
"3B": {
"grp": "fd",
"class": 3,
"rating": "B",
"cost": 169304,
"mass": 8,
"power": 0.38,
"optmass": 125,
"maxfuel": 1.5,
"fuelmul": 0.01,
"fuelpower": 2.15
},
"3A": {
"grp": "fd",
"class": 3,
"rating": "A",
"cost": 507912,
"mass": 5,
"power": 0.45,
"optmass": 150,
"maxfuel": 1.8,
"fuelmul": 0.012,
"fuelpower": 2.15
},
"2E": {
"grp": "fd",
"class": 2,
"rating": "E",
"cost": 1978,
"mass": 2.5,
"power": 0.16,
"optmass": 48,
"maxfuel": 0.6,
"fuelmul": 0.011,
"fuelpower": 2
},
"2D": {
"grp": "fd",
"class": 2,
"rating": "D",
"cost": 5934,
"mass": 1,
"power": 0.18,
"optmass": 54,
"maxfuel": 0.6,
"fuelmul": 0.01,
"fuelpower": 2
},
"2C": {
"grp": "fd",
"class": 2,
"rating": "C",
"cost": 17803,
"mass": 2.5,
"power": 0.2,
"optmass": 60,
"maxfuel": 0.6,
"fuelmul": 0.008,
"fuelpower": 2
},
"2B": {
"grp": "fd",
"class": 2,
"rating": "B",
"cost": 53408,
"mass": 4,
"power": 0.25,
"optmass": 75,
"maxfuel": 0.8,
"fuelmul": 0.01,
"fuelpower": 2
},
"2A": {
"grp": "fd",
"class": 2,
"rating": "A",
"cost": 160224,
"mass": 2.5,
"power": 0.3,
"optmass": 90,
"maxfuel": 0.9,
"fuelmul": 0.012,
"fuelpower": 2
}
}

View File

@@ -1,44 +0,0 @@
{
"1C": {
"grp": "ft",
"class": 1,
"rating": "C",
"cost": 1000,
"capacity": 2
},
"2C": {
"grp": "ft",
"class": 2,
"rating": "C",
"cost": 3750,
"capacity": 4
},
"3C": {
"grp": "ft",
"class": 3,
"rating": "C",
"cost": 7063,
"capacity": 8
},
"4C": {
"grp": "ft",
"class": 4,
"rating": "C",
"cost": 24734,
"capacity": 16
},
"5C": {
"grp": "ft",
"class": 5,
"rating": "C",
"cost": 97754,
"capacity": 32
},
"6C": {
"grp": "ft",
"class": 6,
"rating": "C",
"cost": 341577,
"capacity": 64
}
}

View File

@@ -1,272 +0,0 @@
{
"6E": {
"grp": "ls",
"class": 6,
"rating": "E",
"cost": 88978,
"mass": 40,
"power": 0.64,
"time": 300
},
"6D": {
"grp": "ls",
"class": 6,
"rating": "D",
"cost": 222444,
"mass": 16,
"power": 0.72,
"time": 450
},
"6C": {
"grp": "ls",
"class": 6,
"rating": "C",
"cost": 556110,
"mass": 40,
"power": 0.8,
"time": 600
},
"6B": {
"grp": "ls",
"class": 6,
"rating": "B",
"cost": 1390275,
"mass": 64,
"power": 0.88,
"time": 900
},
"6A": {
"grp": "ls",
"class": 6,
"rating": "A",
"cost": 3475688,
"mass": 40,
"power": 0.96,
"time": 1500
},
"5E": {
"grp": "ls",
"class": 5,
"rating": "E",
"cost": 31778,
"mass": 20,
"power": 0.57,
"time": 300
},
"5D": {
"grp": "ls",
"class": 5,
"rating": "D",
"cost": 79444,
"mass": 8,
"power": 0.64,
"time": 450
},
"5C": {
"grp": "ls",
"class": 5,
"rating": "C",
"cost": 198611,
"mass": 20,
"power": 0.71,
"time": 600
},
"5B": {
"grp": "ls",
"class": 5,
"rating": "B",
"cost": 496527,
"mass": 32,
"power": 0.78,
"time": 900
},
"5A": {
"grp": "ls",
"class": 5,
"rating": "A",
"cost": 1241317,
"mass": 20,
"power": 0.85,
"time": 1500
},
"4E": {
"grp": "ls",
"class": 4,
"rating": "E",
"cost": 11349,
"mass": 10,
"power": 0.5,
"time": 300
},
"4D": {
"grp": "ls",
"class": 4,
"rating": "D",
"cost": 28373,
"mass": 4,
"power": 0.56,
"time": 450
},
"4C": {
"grp": "ls",
"class": 4,
"rating": "C",
"cost": 70932,
"mass": 10,
"power": 0.62,
"time": 600
},
"4B": {
"grp": "ls",
"class": 4,
"rating": "B",
"cost": 177331,
"mass": 16,
"power": 0.68,
"time": 900
},
"4A": {
"grp": "ls",
"class": 4,
"rating": "A",
"cost": 443328,
"mass": 10,
"power": 0.74,
"time": 1500
},
"3E": {
"grp": "ls",
"class": 3,
"rating": "E",
"cost": 4053,
"mass": 5,
"power": 0.42,
"time": 300
},
"3D": {
"grp": "ls",
"class": 3,
"rating": "D",
"cost": 10133,
"mass": 2,
"power": 0.48,
"time": 450
},
"3C": {
"grp": "ls",
"class": 3,
"rating": "C",
"cost": 25333,
"mass": 5,
"power": 0.53,
"time": 600
},
"3B": {
"grp": "ls",
"class": 3,
"rating": "B",
"cost": 63333,
"mass": 8,
"power": 0.58,
"time": 900
},
"3A": {
"grp": "ls",
"class": 3,
"rating": "A",
"cost": 158331,
"mass": 5,
"power": 0.64,
"time": 1500
},
"2E": {
"grp": "ls",
"class": 2,
"rating": "E",
"cost": 1448,
"mass": 2.5,
"power": 0.37,
"time": 300
},
"2D": {
"grp": "ls",
"class": 2,
"rating": "D",
"cost": 3619,
"mass": 1,
"power": 0.41,
"time": 450
},
"2C": {
"grp": "ls",
"class": 2,
"rating": "C",
"cost": 9048,
"mass": 2.5,
"power": 0.46,
"time": 600
},
"2B": {
"grp": "ls",
"class": 2,
"rating": "B",
"cost": 22619,
"mass": 4,
"power": 0.51,
"time": 900
},
"2A": {
"grp": "ls",
"class": 2,
"rating": "A",
"cost": 56547,
"mass": 2.5,
"power": 0.55,
"time": 1500
},
"1E": {
"grp": "ls",
"class": 1,
"rating": "E",
"cost": 517,
"mass": 1.3,
"power": 0.32,
"time": 300
},
"1D": {
"grp": "ls",
"class": 1,
"rating": "D",
"cost": 1293,
"mass": 0.5,
"power": 0.36,
"time": 450
},
"1C": {
"grp": "ls",
"class": 1,
"rating": "C",
"cost": 3231,
"mass": 1.3,
"power": 0.4,
"time": 600
},
"1B": {
"grp": "ls",
"class": 1,
"rating": "B",
"cost": 8078,
"mass": 2,
"power": 0.44,
"time": 900
},
"1A": {
"grp": "ls",
"class": 1,
"rating": "A",
"cost": 20195,
"mass": 1.3,
"power": 0.48,
"time": 1500
}
}

View File

@@ -1,42 +0,0 @@
{
"8E": { "grp": "pd", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 0.64, "weaponcapacity": 48, "weaponrecharge": 4.8, "enginecapacity": 32, "enginerecharge": 3.2, "systemcapacity": 32, "systemrecharge": 3.2 },
"8D": { "grp": "pd", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 0.72, "weaponcapacity": 54, "weaponrecharge": 5.4, "enginecapacity": 36, "enginerecharge": 3.6, "systemcapacity": 36, "systemrecharge": 3.6 },
"8C": { "grp": "pd", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 0.8, "weaponcapacity": 60, "weaponrecharge": 6, "enginecapacity": 40, "enginerecharge": 4, "systemcapacity": 40, "systemrecharge": 4 },
"8B": { "grp": "pd", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 0.88, "weaponcapacity": 66, "weaponrecharge": 6.6, "enginecapacity": 44, "enginerecharge": 4.4, "systemcapacity": 44, "systemrecharge": 4.4 },
"8A": { "grp": "pd", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 0.96, "weaponcapacity": 72, "weaponrecharge": 7.2, "enginecapacity": 48, "enginerecharge": 4.8, "systemcapacity": 48, "systemrecharge": 4.8 },
"7E": { "grp": "pd", "class": 7, "rating": "E", "cost": 249137, "mass": 80, "power": 0.59, "weaponcapacity": 41, "weaponrecharge": 4.1, "enginecapacity": 27, "enginerecharge": 2.6, "systemcapacity": 27, "systemrecharge": 2.6 },
"7D": { "grp": "pd", "class": 7, "rating": "D", "cost": 622843, "mass": 32, "power": 0.67, "weaponcapacity": 46, "weaponrecharge": 4.6, "enginecapacity": 31, "enginerecharge": 3, "systemcapacity": 31, "systemrecharge": 3 },
"7C": { "grp": "pd", "class": 7, "rating": "C", "cost": 1557108, "mass": 80, "power": 0.74, "weaponcapacity": 51, "weaponrecharge": 5.1, "enginecapacity": 34, "enginerecharge": 3.3, "systemcapacity": 34, "systemrecharge": 3.3 },
"7B": { "grp": "pd", "class": 7, "rating": "B", "cost": 3892770, "mass": 128, "power": 0.81, "weaponcapacity": 56, "weaponrecharge": 5.6, "enginecapacity": 37, "enginerecharge": 3.6, "systemcapacity": 37, "systemrecharge": 3.6 },
"7A": { "grp": "pd", "class": 7, "rating": "A", "cost": 9731925, "mass": 80, "power": 0.89, "weaponcapacity": 61, "weaponrecharge": 6.1, "enginecapacity": 41, "enginerecharge": 4, "systemcapacity": 41, "systemrecharge": 4 },
"6E": { "grp": "pd", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 0.54, "weaponcapacity": 34, "weaponrecharge": 3.4, "enginecapacity": 23, "enginerecharge": 2.2, "systemcapacity": 23, "systemrecharge": 2.2 },
"6D": { "grp": "pd", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 0.61, "weaponcapacity": 38, "weaponrecharge": 3.9, "enginecapacity": 26, "enginerecharge": 2.4, "systemcapacity": 26, "systemrecharge": 2.4 },
"6C": { "grp": "pd", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 0.68, "weaponcapacity": 42, "weaponrecharge": 4.3, "enginecapacity": 29, "enginerecharge": 2.7, "systemcapacity": 29, "systemrecharge": 2.7 },
"6B": { "grp": "pd", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 0.75, "weaponcapacity": 46, "weaponrecharge": 4.7, "enginecapacity": 32, "enginerecharge": 3, "systemcapacity": 32, "systemrecharge": 3 },
"6A": { "grp": "pd", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 0.82, "weaponcapacity": 50, "weaponrecharge": 5.2, "enginecapacity": 35, "enginerecharge": 3.2, "systemcapacity": 35, "systemrecharge": 3.2 },
"5E": { "grp": "pd", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.5, "weaponcapacity": 27, "weaponrecharge": 2.9, "enginecapacity": 19, "enginerecharge": 1.7, "systemcapacity": 19, "systemrecharge": 1.7 },
"5D": { "grp": "pd", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 0.56, "weaponcapacity": 31, "weaponrecharge": 3.2, "enginecapacity": 22, "enginerecharge": 1.9, "systemcapacity": 22, "systemrecharge": 1.9 },
"5C": { "grp": "pd", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 0.62, "weaponcapacity": 34, "weaponrecharge": 3.6, "enginecapacity": 24, "enginerecharge": 2.1, "systemcapacity": 24, "systemrecharge": 2.1 },
"5B": { "grp": "pd", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 0.68, "weaponcapacity": 37, "weaponrecharge": 4, "enginecapacity": 26, "enginerecharge": 2.3, "systemcapacity": 26, "systemrecharge": 2.3 },
"5A": { "grp": "pd", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 0.74, "weaponcapacity": 41, "weaponrecharge": 4.3, "enginecapacity": 29, "enginerecharge": 2.5, "systemcapacity": 29, "systemrecharge": 2.5 },
"4E": { "grp": "pd", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.45, "weaponcapacity": 22, "weaponrecharge": 2.3, "enginecapacity": 15, "enginerecharge": 1.3, "systemcapacity": 15, "systemrecharge": 1.3 },
"4D": { "grp": "pd", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.5, "weaponcapacity": 24, "weaponrecharge": 2.6, "enginecapacity": 17, "enginerecharge": 1.4, "systemcapacity": 17, "systemrecharge": 1.4 },
"4C": { "grp": "pd", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 0.56, "weaponcapacity": 27, "weaponrecharge": 2.9, "enginecapacity": 19, "enginerecharge": 1.6, "systemcapacity": 19, "systemrecharge": 1.6 },
"4B": { "grp": "pd", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 0.62, "weaponcapacity": 30, "weaponrecharge": 3.2, "enginecapacity": 21, "enginerecharge": 1.8, "systemcapacity": 21, "systemrecharge": 1.8 },
"4A": { "grp": "pd", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 0.67, "weaponcapacity": 32, "weaponrecharge": 3.5, "enginecapacity": 23, "enginerecharge": 1.9, "systemcapacity": 23, "systemrecharge": 1.9 },
"3E": { "grp": "pd", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.4, "weaponcapacity": 16, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.9, "systemcapacity": 12, "systemrecharge": 0.9 },
"3D": { "grp": "pd", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.45, "weaponcapacity": 18, "weaponrecharge": 2.1, "enginecapacity": 14, "enginerecharge": 1, "systemcapacity": 14, "systemrecharge": 1 },
"3C": { "grp": "pd", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 0.5, "weaponcapacity": 20, "weaponrecharge": 2.3, "enginecapacity": 15, "enginerecharge": 1.1, "systemcapacity": 15, "systemrecharge": 1.1 },
"3B": { "grp": "pd", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 0.55, "weaponcapacity": 22, "weaponrecharge": 2.5, "enginecapacity": 17, "enginerecharge": 1.2, "systemcapacity": 17, "systemrecharge": 1.2 },
"3A": { "grp": "pd", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 0.6, "weaponcapacity": 24, "weaponrecharge": 2.8, "enginecapacity": 18, "enginerecharge": 1.3, "systemcapacity": 18, "systemrecharge": 1.3 },
"2E": { "grp": "pd", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.36, "weaponcapacity": 12, "weaponrecharge": 1.4, "enginecapacity": 10, "enginerecharge": 0.6, "systemcapacity": 10, "systemrecharge": 0.6 },
"2D": { "grp": "pd", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.41, "weaponcapacity": 14, "weaponrecharge": 1.6, "enginecapacity": 11, "enginerecharge": 0.6, "systemcapacity": 11, "systemrecharge": 0.6 },
"2C": { "grp": "pd", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.45, "weaponcapacity": 15, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.7, "systemcapacity": 12, "systemrecharge": 0.7 },
"2B": { "grp": "pd", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 0.5, "weaponcapacity": 17, "weaponrecharge": 2, "enginecapacity": 13, "enginerecharge": 0.8, "systemcapacity": 13, "systemrecharge": 0.8 },
"2A": { "grp": "pd", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 0.54, "weaponcapacity": 18, "weaponrecharge": 2.2, "enginecapacity": 14, "enginerecharge": 0.8, "systemcapacity": 14, "systemrecharge": 0.8 },
"1E": { "grp": "pd", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.32, "weaponcapacity": 10, "weaponrecharge": 1.2, "enginecapacity": 8, "enginerecharge": 0.4, "systemcapacity": 8, "systemrecharge": 0.4 },
"1D": { "grp": "pd", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.36, "weaponcapacity": 11, "weaponrecharge": 1.4, "enginecapacity": 9, "enginerecharge": 0.5, "systemcapacity": 9, "systemrecharge": 0.5 },
"1C": { "grp": "pd", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.4, "weaponcapacity": 12, "weaponrecharge": 1.5, "enginecapacity": 10, "enginerecharge": 0.5, "systemcapacity": 10, "systemrecharge": 0.5 },
"1B": { "grp": "pd", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.44, "weaponcapacity": 13, "weaponrecharge": 1.7, "enginecapacity": 11, "enginerecharge": 0.6, "systemcapacity": 11, "systemrecharge": 0.6 },
"1A": { "grp": "pd", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.48, "weaponcapacity": 14, "weaponrecharge": 1.8, "enginecapacity": 12, "enginerecharge": 0.6, "systemcapacity": 12, "systemrecharge": 0.6 }
}

View File

@@ -1,37 +0,0 @@
{
"8E":{ "grp": "pp", "class": 8, "rating": "E", "cost": 2007241, "mass": 160, "pGen": 24, "eff": "F" },
"8D":{ "grp": "pp", "class": 8, "rating": "D", "cost": 6021722, "mass": 64, "pGen": 27, "eff": "D" },
"8C":{ "grp": "pp", "class": 8, "rating": "C", "cost": 18065165, "mass": 80, "pGen": 30, "eff": "C" },
"8B":{ "grp": "pp", "class": 8, "rating": "B", "cost": 54195495, "mass": 128, "pGen": 33, "eff": "C" },
"8A":{ "grp": "pp", "class": 8, "rating": "A", "cost": 162586486, "mass": 80, "pGen": 36, "eff": "B" },
"7E":{ "grp": "pp", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "pGen": 20, "eff": "F" },
"7D":{ "grp": "pp", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "pGen": 22.5, "eff": "D" },
"7C":{ "grp": "pp", "class": 7, "rating": "C", "cost": 5698790, "mass": 40, "pGen": 25, "eff": "C" },
"7B":{ "grp": "pp", "class": 7, "rating": "B", "cost": 17096371, "mass": 64, "pGen": 27.5, "eff": "C" },
"7A":{ "grp": "pp", "class": 7, "rating": "A", "cost": 51289112, "mass": 40, "pGen": 30, "eff": "B" },
"6E":{ "grp": "pp", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "pGen": 16.8, "eff": "F" },
"6D":{ "grp": "pp", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "pGen": 18.9, "eff": "D" },
"6C":{ "grp": "pp", "class": 6, "rating": "C", "cost": 1797726, "mass": 20, "pGen": 21, "eff": "C" },
"6B":{ "grp": "pp", "class": 6, "rating": "B", "cost": 5393177, "mass": 32, "pGen": 23.1, "eff": "C" },
"6A":{ "grp": "pp", "class": 6, "rating": "A", "cost": 16179531, "mass": 20, "pGen": 25.2, "eff": "B" },
"5E":{ "grp": "pp", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "pGen": 13.6, "eff": "F" },
"5D":{ "grp": "pp", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "pGen": 15.3, "eff": "D" },
"5C":{ "grp": "pp", "class": 5, "rating": "C", "cost": 567106, "mass": 10, "pGen": 17, "eff": "C" },
"5B":{ "grp": "pp", "class": 5, "rating": "B", "cost": 1701318, "mass": 16, "pGen": 18.7, "eff": "C" },
"5A":{ "grp": "pp", "class": 5, "rating": "A", "cost": 5103953, "mass": 10, "pGen": 20.4, "eff": "B" },
"4E":{ "grp": "pp", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "pGen": 10.4, "eff": "F" },
"4D":{ "grp": "pp", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "pGen": 11.7, "eff": "D" },
"4C":{ "grp": "pp", "class": 4, "rating": "C", "cost": 178898, "mass": 5, "pGen": 13, "eff": "C" },
"4B":{ "grp": "pp", "class": 4, "rating": "B", "cost": 536693, "mass": 8, "pGen": 14.3, "eff": "C" },
"4A":{ "grp": "pp", "class": 4, "rating": "A", "cost": 1610080, "mass": 5, "pGen": 15.6, "eff": "B" },
"3E":{ "grp": "pp", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "pGen": 8, "eff": "F" },
"3D":{ "grp": "pp", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "pGen": 9, "eff": "D" },
"3C":{ "grp": "pp", "class": 3, "rating": "C", "cost": 56435, "mass": 2.5, "pGen": 10, "eff": "C" },
"3B":{ "grp": "pp", "class": 3, "rating": "B", "cost": 169304, "mass": 4, "pGen": 11, "eff": "C" },
"3A":{ "grp": "pp", "class": 3, "rating": "A", "cost": 507912, "mass": 2.5, "pGen": 12, "eff": "B" },
"2E":{ "grp": "pp", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "pGen": 6.4, "eff": "F" },
"2D":{ "grp": "pp", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "pGen": 7.2, "eff": "D" },
"2C":{ "grp": "pp", "class": 2, "rating": "C", "cost": 17803, "mass": 1.3, "pGen": 8, "eff": "C" },
"2B":{ "grp": "pp", "class": 2, "rating": "B", "cost": 53408, "mass": 2, "pGen": 8.8, "eff": "C" },
"2A":{ "grp": "pp", "class": 2, "rating": "A", "cost": 160224, "mass": 1.3, "pGen": 9.6, "eff": "B" }
}

View File

@@ -1,43 +0,0 @@
{
"8E": { "grp": "s", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 0.55, "range": 5.12 },
"8D": { "grp": "s", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 0.62, "range": 5.76 },
"8C": { "grp": "s", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 0.69, "range": 6.4 },
"8B": { "grp": "s", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 1.14, "range": 7.04 },
"8A": { "grp": "s", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 2.07, "range": 7.68 },
"6E": { "grp": "s", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 0.4, "range": 4.8 },
"6D": { "grp": "s", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 0.45, "range": 5.4 },
"6C": { "grp": "s", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 0.5, "range": 6 },
"6B": { "grp": "s", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 0.83, "range": 6.6 },
"6A": { "grp": "s", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 1.5, "range": 7.2 },
"5E": { "grp": "s", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.33, "range": 4.64 },
"5D": { "grp": "s", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 0.37, "range": 5.22 },
"5C": { "grp": "s", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 0.41, "range": 5.8 },
"5B": { "grp": "s", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 0.68, "range": 6.38 },
"5A": { "grp": "s", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 1.23, "range": 6.96 },
"4E": { "grp": "s", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.27, "range": 4.48 },
"4D": { "grp": "s", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.31, "range": 5.04 },
"4C": { "grp": "s", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 0.34, "range": 5.6 },
"4B": { "grp": "s", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 0.56, "range": 6.16 },
"4A": { "grp": "s", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 1.02, "range": 6.72 },
"3E": { "grp": "s", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.22, "range": 4.32 },
"3D": { "grp": "s", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.25, "range": 4.86 },
"3C": { "grp": "s", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 0.28, "range": 5.4 },
"3B": { "grp": "s", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 0.46, "range": 5.94 },
"3A": { "grp": "s", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 0.84, "range": 6.48 },
"2E": { "grp": "s", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.18, "range": 4.16 },
"2D": { "grp": "s", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.21, "range": 4.68 },
"2C": { "grp": "s", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.23, "range": 5.2 },
"2B": { "grp": "s", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 0.38, "range": 5.72 },
"2A": { "grp": "s", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 0.69, "range": 6.24 },
"1E": { "grp": "s", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.16, "range": 4 },
"1D": { "grp": "s", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.18, "range": 4.5 },
"1C": { "grp": "s", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.2, "range": 5 },
"1B": { "grp": "s", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.33, "range": 5.5 },
"1A": { "grp": "s", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.6, "range": 6 }
}

View File

@@ -1,32 +0,0 @@
{
"7E": { "grp": "t", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "power": 6.08, "optmass": 1440, "maxmass": 2160 },
"7D": { "grp": "t", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "power": 6.84, "optmass": 1620, "maxmass": 2430 },
"7C": { "grp": "t", "class": 7, "rating": "C", "cost": 5698790, "mass": 80, "power": 7.6, "optmass": 1800, "maxmass": 2700 },
"7B": { "grp": "t", "class": 7, "rating": "B", "cost": 17096371, "mass": 128, "power": 8.36, "optmass": 1980, "maxmass": 2970 },
"7A": { "grp": "t", "class": 7, "rating": "A", "cost": 51289112, "mass": 80, "power": 9.12, "optmass": 2160, "maxmass": 3240 },
"6E": { "grp": "t", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "power": 5.04, "optmass": 960, "maxmass": 1440 },
"6D": { "grp": "t", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "power": 5.67, "optmass": 1080, "maxmass": 1620 },
"6C": { "grp": "t", "class": 6, "rating": "C", "cost": 1797726, "mass": 40, "power": 6.3, "optmass": 1200, "maxmass": 1800 },
"6B": { "grp": "t", "class": 6, "rating": "B", "cost": 5393177, "mass": 64, "power": 6.93, "optmass": 1320, "maxmass": 1980 },
"6A": { "grp": "t", "class": 6, "rating": "A", "cost": 16179531, "mass": 40, "power": 7.56, "optmass": 1440, "maxmass": 2160 },
"5E": { "grp": "t", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "power": 4.08, "optmass": 560, "maxmass": 840 },
"5D": { "grp": "t", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "power": 4.59, "optmass": 630, "maxmass": 945 },
"5C": { "grp": "t", "class": 5, "rating": "C", "cost": 567106, "mass": 20, "power": 5.1, "optmass": 700, "maxmass": 1050 },
"5B": { "grp": "t", "class": 5, "rating": "B", "cost": 1701318, "mass": 32, "power": 5.61, "optmass": 770, "maxmass": 1155 },
"5A": { "grp": "t", "class": 5, "rating": "A", "cost": 5103953, "mass": 20, "power": 6.12, "optmass": 840, "maxmass": 1260 },
"4E": { "grp": "t", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "power": 3.82, "optmass": 280, "maxmass": 420 },
"4D": { "grp": "t", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "power": 3.69, "optmass": 315, "maxmass": 473 },
"4C": { "grp": "t", "class": 4, "rating": "C", "cost": 178898, "mass": 10, "power": 4.1, "optmass": 350, "maxmass": 525 },
"4B": { "grp": "t", "class": 4, "rating": "B", "cost": 536693, "mass": 16, "power": 4.51, "optmass": 385, "maxmass": 578 },
"4A": { "grp": "t", "class": 4, "rating": "A", "cost": 1610080, "mass": 10, "power": 4.92, "optmass": 420, "maxmass": 630 },
"3E": { "grp": "t", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "power": 2.48, "optmass": 80, "maxmass": 120 },
"3D": { "grp": "t", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "power": 2.79, "optmass": 90, "maxmass": 135 },
"3C": { "grp": "t", "class": 3, "rating": "C", "cost": 56435, "mass": 5, "power": 3.1, "optmass": 100, "maxmass": 150 },
"3B": { "grp": "t", "class": 3, "rating": "B", "cost": 169304, "mass": 8, "power": 3.41, "optmass": 110, "maxmass": 165 },
"3A": { "grp": "t", "class": 3, "rating": "A", "cost": 507912, "mass": 5, "power": 3.72, "optmass": 120, "maxmass": 180 },
"2E": { "grp": "t", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "power": 2, "optmass": 48, "maxmass": 72 },
"2D": { "grp": "t", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "power": 2.25, "optmass": 54, "maxmass": 81 },
"2C": { "grp": "t", "class": 2, "rating": "C", "cost": 17803, "mass": 2.5, "power": 2.5, "optmass": 60, "maxmass": 90 },
"2B": { "grp": "t", "class": 2, "rating": "B", "cost": 53408, "mass": 4, "power": 2.75, "optmass": 66, "maxmass": 99 },
"2A": { "grp": "t", "class": 2, "rating": "A", "cost": 160224, "mass": 2.5, "power": 3, "optmass": 72, "maxmass": 108 }
}

View File

@@ -1,183 +0,0 @@
{
"bl": [
{
"id": "0u",
"grp": "bl",
"class": 3,
"rating": "C",
"cost": 1177600,
"mass": 8,
"power": 1.8,
"mode": "F",
"type": "T",
"damage": 6,
"armourpen": "A",
"rof": null,
"dps": 5,
"mjdps" : 30.33,
"mjeps" : 5.65,
"thermload": 5
},
{
"id": "0v",
"grp": "bl",
"class": 3,
"rating": "C",
"cost": 2396160,
"mass": 8,
"power": 1.78,
"mode": "G",
"type": "T",
"damage": 6,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 24.00,
"mjeps" : 5.59,
"thermload": 6
},
{
"id": "0o",
"grp": "bl",
"class": 3,
"rating": "D",
"cost": 19399600,
"mass": 8,
"power": 1.68,
"mode": "T",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 14.44,
"mjeps" : 3.54,
"thermload": 4
},
{
"id": "0r",
"grp": "bl",
"class": 2,
"rating": "D",
"cost": 299520,
"mass": 4,
"power": 1.12,
"mode": "F",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 19.38,
"mjeps" : 3.42,
"thermload": 4
},
{
"id": "0s",
"grp": "bl",
"class": 2,
"rating": "D",
"cost": 500600,
"mass": 4,
"power": 1.1,
"mode": "G",
"type": "T",
"damage": 5,
"armourpen": "A",
"rof": null,
"dps": 4,
"mjdps" : 13.85,
"mjeps" : 3.26,
"thermload": 4
},
{
"id": "0t",
"grp": "bl",
"class": 2,
"rating": "E",
"cost": 2099900,
"mass": 4,
"power": 1.03,
"mode": "T",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 8.95,
"mjeps" : 2.10,
"thermload": 3
},
{
"id": "10",
"grp": "bl",
"class": 1,
"rating": "E",
"cost": 37430,
"mass": 2,
"power": 0.69,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 11.61,
"mjeps" : 2.16,
"thermload": 3
},
{
"id": "0p",
"grp": "bl",
"class": 1,
"rating": "E",
"cost": 74650,
"mass": 2,
"power": 0.67,
"mode": "G",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 8.70,
"mjeps" : 2.05,
"thermload": 3
},
{
"id": "0q",
"grp": "bl",
"class": 1,
"rating": "F",
"cost": 500000,
"mass": 2,
"power": 0.63,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": null,
"dps": 3,
"mjdps" : 5.49,
"mjeps" : 1.29,
"thermload": 2
},
{
"id": "b0",
"grp": "bl",
"name": "Retributor",
"class": 1,
"rating": "E",
"cost": 56145,
"mass": 2,
"power": 0.69,
"mode": "F",
"type": "T",
"damage": 0,
"armourpen": "A",
"rof": null,
"dps": 3,
"thermload": 1
}
]
}

View File

@@ -1,183 +0,0 @@
{
"ul": [
{
"id": "14",
"grp": "ul",
"class": 3,
"rating": "D",
"cost": 140400,
"mass": 8,
"power": 1.66,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "B",
"rof": 1,
"dps": 4,
"mjdps" : 24.97,
"mjeps" : 3.52,
"ssdam" : 27.85,
"thermload": 1
},
{
"id": "15",
"grp": "ul",
"class": 3,
"rating": "E",
"cost": 281600,
"mass": 8,
"power": 1.65,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 1.2,
"dps": 4,
"mjdps" : 18.56,
"mjeps" : 3.27,
"ssdam" : 18.56,
"thermload": 1
},
{
"id": "16",
"grp": "ul",
"class": 3,
"rating": "E",
"cost": 800400,
"mass": 8,
"power": 1.57,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 0.9,
"dps": 4,
"mjdps" : 8.78,
"mjeps" : 1.69,
"ssdam" : 9.45,
"thermload": 1
},
{
"id": "7h",
"grp": "ul",
"class":2,
"rating":"E",
"cost": 23000,
"mass": 4,
"power":1.05,
"mode":"F",
"type":"T",
"damage": 3,
"armourpen":"A",
"rof":1.3,
"dps": 4,
"thermload": 1
},
{
"id": "7i",
"grp": "ul",
"class":2,
"rating":"F",
"cost": 48500,
"mass": 4,
"power":1.04,
"mode":"G",
"type":"T",
"damage": 3,
"armourpen":"A",
"rof":1.5,
"dps": 4,
"thermload": 1
},
{
"id": "7j",
"grp": "ul",
"class":2,
"rating":"F",
"cost": 162800,
"mass": 4,
"power":0.98,
"mode":"T",
"type":"T",
"damage": 2,
"armourpen":"A",
"rof":1.1,
"dps": 3,
"thermload": 1
},
{
"id": "11",
"grp": "ul",
"class": 1,
"rating": "F",
"cost": 4400,
"mass": 2,
"power": 0.65,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 3,
"mjdps" : 9.94,
"mjeps" : 1.40,
"ssdam" : 6.45,
"thermload": 1
},
{
"id": "12",
"grp": "ul",
"class": 1,
"rating": "G",
"cost": 8600,
"mass": 2,
"power": 0.64,
"mode": "G",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.7,
"dps": 3,
"mjdps" : 7.95,
"mjeps" : 1.40,
"ssdam" : 4.53,
"thermload": 1
},
{
"id": "13",
"grp": "ul",
"class": 1,
"rating": "G",
"cost": 52800,
"mass": 2,
"power": 0.6,
"mode": "T",
"type": "T",
"damage": 1,
"armourpen": "B",
"rof": 1.3,
"dps": 2,
"mjdps" : 2.98,
"mjeps" : 0.63,
"ssdam" : 2.24,
"thermload": 1
},
{
"id": "cy",
"grp": "ul",
"name": "Cytoscrambler",
"class": 1,
"rating": "F",
"cost": 8800,
"mass": 2,
"power": 0.65,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 3,
"thermload": 1
}
]
}

View File

@@ -1,224 +0,0 @@
{
"c": [
{
"id": "1q",
"grp": "c",
"class": 4,
"rating": "B",
"cost": 2700800,
"mass": 16,
"power": 0.92,
"mode": "F",
"type": "K",
"damage": 9,
"armourpen": "A",
"rof": 0.4,
"dps": 5,
"thermload": 2,
"clip": 5,
"mjdps": 8.13,
"ssdam" : 37.13,
"ammo": 100
},
{
"id": "1r",
"grp": "c",
"class": 4,
"rating": "B",
"cost": 5401600,
"mass": 16,
"power": 1.03,
"mode": "G",
"type": "K",
"damage": 8,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 2,
"clip": 5,
"mjdps": 10.97,
"ssdam" : 30.94,
"ammo": 100
},
{
"id": "1n",
"grp": "c",
"class": 3,
"rating": "C",
"cost": 675200,
"mass": 8,
"power": 0.67,
"mode": "F",
"type": "K",
"damage": 7,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 2,
"clip": 5,
"mjdps": 8.13,
"ssdam" : 22.28,
"ammo": 100
},
{
"id": "1o",
"grp": "c",
"class": 3,
"rating": "C",
"cost": 1350400,
"mass": 8,
"power": 0.75,
"mode": "G",
"type": "K",
"damage": 7,
"armourpen": "A",
"rof": 0.4,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 7.95,
"ssdam" : 21.04,
"ammo": 100
},
{
"id": "1p",
"grp": "c",
"class": 3,
"rating": "D",
"cost": 16204800,
"mass": 8,
"power": 0.64,
"mode": "T",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 3.58,
"ssdam" : 12.38,
"ammo": 100
},
{
"id": "1k",
"grp": "c",
"class": 2,
"rating": "D",
"cost": 168430,
"mass": 4,
"power": 0.49,
"mode": "F",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.5,
"dps": 4,
"thermload": 1,
"clip": 5,
"mjdps" : 6.00,
"ssdam" : 15.47,
"ammo": 100
},
{
"id": "1l",
"grp": "c",
"class": 2,
"rating": "D",
"cost": 337600,
"mass": 4,
"power": 0.54,
"mode": "G",
"type": "K",
"damage": 6,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 6.24,
"ssdam" : 15.47,
"ammo": 100
},
{
"id": "1m",
"grp": "c",
"class": 2,
"rating": "E",
"cost": 4051200,
"mass": 4,
"power": 0.45,
"mode": "T",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.3,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 2.41,
"ssdam" : 7.74,
"ammo": 100
},
{
"id": "1h",
"grp": "c",
"class": 1,
"rating": "D",
"cost": 21100,
"mass": 2,
"power": 0.34,
"mode": "F",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 4.00,
"ssdam" : 9.59,
"ammo": 100
},
{
"id": "1i",
"grp": "c",
"class": 1,
"rating": "E",
"cost": 42200,
"mass": 2,
"power": 0.38,
"mode": "G",
"type": "K",
"damage": 5,
"armourpen": "A",
"rof": 0.5,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 3.80,
"ssdam" : 8.97,
"ammo": 100
},
{
"id": "1j",
"grp": "c",
"class": 1,
"rating": "F",
"cost": 506400,
"mass": 2,
"power": 0.32,
"mode": "T",
"type": "K",
"damage": 4,
"armourpen": "A",
"rof": 0.4,
"dps": 3,
"thermload": 1,
"clip": 5,
"mjdps" : 1.35,
"ssdam" : 4.13,
"ammo": 100
}
]
}

View File

@@ -1,59 +0,0 @@
{
"cs": [
{
"id": "0d",
"grp": "cs",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0c",
"grp": "cs",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0b",
"grp": "cs",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0a",
"grp": "cs",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "09",
"grp": "cs",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,63 +0,0 @@
{
"cm": [
{
"id": "00",
"grp": "cm",
"name": "Chaff Launcher",
"class": 0,
"rating": "I",
"cost": 8500,
"mass": 1.3,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 2,
"clip": 1,
"ammo": 10
},
{
"id": "01",
"grp": "cm",
"name": "Electronic Countermeasure",
"class": 0,
"rating": "F",
"cost": 12500,
"mass": 1.3,
"power": 0.2,
"range": 3,
"chargeup": 4,
"activepower": 4,
"cooldown": 10
},
{
"id": "02",
"grp": "cm",
"name": "Heat Sink Launcher",
"class": 0,
"rating": "I",
"cost": 3500,
"mass": 1.3,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 0,
"clip": 1,
"ammo": 3
},
{
"id": "03",
"grp": "cm",
"name": "Point Defence",
"class": 0,
"rating": "I",
"cost": 18546,
"mass": 0.5,
"power": 0.2,
"passive": 1,
"armourpen": "F",
"thermload": 1,
"clip": 50,
"ammo": 10000
}
]
}

View File

@@ -1,200 +0,0 @@
{
"fc": [
{
"id": "1t",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 1167360,
"mass": 8,
"power": 1.02,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.5,
"dps": 10,
"thermload": 1,
"clip": 3,
"mjdps": 15.19,
"ssdam" : 28.36,
"ammo": 30
},
{
"id": "1u",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 1751040,
"mass": 8,
"power": 1.55,
"mode": "G",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.8,
"dps": 10,
"thermload": 1,
"clip": 3,
"mjdps" : 12.77,
"ssdam" : 23.21,
"ammo": 30
},
{
"id": "1v",
"grp": "fc",
"class": 3,
"rating": "C",
"cost": 5836800,
"mass": 8,
"power": 1.29,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 3.3,
"dps": 9,
"thermload": 1,
"clip": 3,
"mjdps" : 6.85,
"ssdam" : 12.89,
"ammo": 30
},
{
"id": "1s",
"grp": "fc",
"class": 2,
"rating": "A",
"cost": 291840,
"mass": 4,
"power": 0.74,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 5,
"dps": 9,
"thermload": 1,
"clip": 3,
"mjdps" : 9.50,
"ssdam" : 18.05,
"ammo": 30
},
{
"id": "7e",
"grp": "fc",
"class": 2,
"rating": "D",
"cost": 437800,
"mass": 4,
"power": 1.03,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.3,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
},
{
"id": "7f",
"grp": "fc",
"class": 2,
"rating": "D",
"cost": 1459200,
"mass": 4,
"power": 0.79,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 3.7,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
},
{
"id": "20",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 36000,
"mass": 2,
"power": 0.45,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.5,
"dps": 8,
"thermload": 1,
"clip": 3,
"mjdps" : 5.53,
"ssdam" : 10.31,
"ammo": 30
},
{
"id": "21",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 54720,
"mass": 2,
"power": 0.59,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.8,
"dps": 7,
"thermload": 1,
"clip": 3,
"mjdps" : 3.58,
"ssdam" : 6.45,
"ammo": 30
},
{
"id": "22",
"grp": "fc",
"class": 1,
"rating": "E",
"cost": 182400,
"mass": 2,
"power": 0.42,
"mode": "T",
"type": "K",
"damage": 1,
"armourpen": "A",
"rof": 4,
"dps": 6,
"thermload": 1,
"clip": 3,
"mjdps" : 2.11,
"ssdam" : 3.87,
"ammo": 30
},
{
"id": "pa",
"grp": "fc",
"name": "Pacifier",
"class": 3,
"rating": "C",
"cost": 1400832,
"mass": 8,
"power": 1.02,
"mode": "F",
"type": "K",
"damage": 3,
"armourpen": "A",
"rof": 4.5,
"dps": 9,
"thermload": 1,
"clip": 3,
"ammo": 30
}
]
}

View File

@@ -1,59 +0,0 @@
{
"ws": [
{
"id": "0i",
"grp": "ws",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0h",
"grp": "ws",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0g",
"grp": "ws",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0f",
"grp": "ws",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "0e",
"grp": "ws",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,59 +0,0 @@
{
"kw": [
{
"id": "0n",
"grp": "kw",
"class": 0,
"rating": "E",
"cost": 13544,
"mass": 1.3,
"power": 0.2,
"range": 2,
"time": 10
},
{
"id": "0m",
"grp": "kw",
"class": 0,
"rating": "D",
"cost": 40633,
"mass": 1.3,
"power": 0.4,
"range": 2.5,
"time": 10
},
{
"id": "0l",
"grp": "kw",
"class": 0,
"rating": "C",
"cost": 121899,
"mass": 1.3,
"power": 0.8,
"range": 3,
"time": 10
},
{
"id": "0k",
"grp": "kw",
"class": 0,
"rating": "B",
"cost": 365698,
"mass": 1.3,
"power": 1.6,
"range": 3.5,
"time": 10
},
{
"id": "0j",
"grp": "kw",
"class": 0,
"rating": "A",
"cost": 1097095,
"mass": 1.3,
"power": 3.2,
"range": 4,
"time": 10
}
]
}

View File

@@ -1,34 +0,0 @@
{
"nl": [
{
"id": "2j",
"grp": "nl",
"class": 1,
"rating": "I",
"cost": 24260,
"mass": 2,
"power": 0.4,
"mode": "F",
"type": "E",
"armourpen": "C",
"thermload": 2,
"clip": 1,
"ammo": 24
},
{
"id": "2k",
"grp": "nl",
"class": 2,
"rating": "I",
"cost": 294080,
"mass": 4,
"power": 0.4,
"mode": "F",
"type": "E",
"armourpen": "C",
"thermload": 3,
"clip": 3,
"ammo": 24
}
]
}

View File

@@ -1,44 +0,0 @@
{
"ml": [
{
"id": "2l",
"grp": "ml",
"class": 1,
"rating": "D",
"cost": 6800,
"mass": 2,
"power": 0.5,
"mode": "F",
"armourpen": "D",
"thermload": 3
},
{
"id": "2m",
"grp": "ml",
"class": 2,
"rating": "D",
"cost": 22576,
"mass": 2,
"power": 0.75,
"mode": "F",
"armourpen": "D",
"thermload": 5
},
{
"id": "ml",
"grp": "ml",
"name": "Mining Lance",
"class": 1,
"rating": "D",
"cost": 13600,
"mass": 2,
"power": 0.7,
"mode": "F",
"type": "T",
"damage": 3,
"dps": 3,
"armourpen": "D",
"thermload": 3
}
]
}

View File

@@ -1,109 +0,0 @@
{
"mr": [
{
"id": "2f",
"grp": "mr",
"class": 2,
"rating": "B",
"cost": 240400,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 7,
"armourpen": "F",
"rof": 2.5,
"dps": 8,
"thermload": 3,
"clip": 12,
"ammo": 24,
"mjdps": 1.72,
"ssdam" : 3.87,
"missile": "D"
},
{
"id": "2g",
"grp": "mr",
"class": 2,
"rating": "B",
"cost": 512400,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 6,
"armourpen": "F",
"rof": 0.3,
"dps": 3,
"thermload": 3,
"clip": 6,
"ammo": 18,
"mjdps": 0.57,
"ssdam" : 2.58,
"missile": "S"
},
{
"id": "2d",
"grp": "mr",
"class": 1,
"rating": "B",
"cost": 32175,
"mass": 2,
"power": 0.4,
"mode": "F",
"type": "E",
"damage": 7,
"armourpen": "F",
"rof": 2.5,
"dps": 8,
"thermload": 3,
"clip": 8,
"ammo": 16,
"mjdps": 1.63,
"ssdam" : 3.87,
"missile": "D"
},
{
"id": "2e",
"grp": "mr",
"class": 1,
"rating": "B",
"cost": 72600,
"mass": 2,
"power": 0.6,
"mode": "F",
"type": "E",
"damage": 6,
"armourpen": "F",
"rof": 0.3,
"dps": 3,
"thermload": 3,
"clip": 6,
"ammo": 6,
"mjdps": 0.57,
"ssdam" : 2.58,
"missile": "S"
},
{
"id": "Ph",
"grp": "mr",
"name": "Pack-Hound",
"class": 2,
"rating": "B",
"cost": 1000832,
"mass": 4,
"power": 1.2,
"mode": "F",
"type": "E",
"damage": 3,
"armourpen": "F",
"rof": 0.5,
"dps": 4,
"thermload": 3,
"grp": "mr",
"clip": 12,
"ammo": 120,
"missile": "S"
}
]
}

View File

@@ -1,143 +0,0 @@
{
"mc": [
{
"id": "26",
"grp": "mc",
"class": 2,
"rating": "E",
"cost": 38000,
"mass": 4,
"power": 0.46,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 7,
"dps": 4,
"thermload": 1,
"clip": 90,
"mjdps" : 6.02,
"ssdam" : 1.20,
"ammo": 2100
},
{
"id": "27",
"grp": "mc",
"class": 2,
"rating": "F",
"cost": 57000,
"mass": 4,
"power": 0.64,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 7.5,
"dps": 4,
"thermload": 1,
"clip": 90,
"mjdps" : 5.59,
"ssdam" : 1.03,
"ammo": 2100
},
{
"id": "28",
"grp": "mc",
"class": 2,
"rating": "F",
"cost": 1292800,
"mass": 4,
"power": 0.5,
"mode": "T",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 5.3,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 2.15,
"ssdam" : 0.52,
"ammo": 2100
},
{
"id": "23",
"grp": "mc",
"class": 1,
"rating": "F",
"cost": 9500,
"mass": 2,
"power": 0.28,
"mode": "F",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 8,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 3.75,
"ssdam" : 0.69,
"ammo": 2100
},
{
"id": "24",
"grp": "mc",
"class": 1,
"rating": "G",
"cost": 14250,
"mass": 2,
"power": 0.37,
"mode": "G",
"type": "K",
"damage": 2,
"armourpen": "A",
"rof": 8.5,
"dps": 3,
"thermload": 1,
"clip": 90,
"mjdps" : 2.03,
"ssdam" : 0.34,
"ammo": 2100
},
{
"id": "25",
"grp": "mc",
"class": 1,
"rating": "G",
"cost": 81600,
"mass": 2,
"power": 0.26,
"mode": "T",
"type": "K",
"damage": 0,
"armourpen": "A",
"rof": 6,
"dps": 2,
"thermload": 1,
"clip": 90,
"mjdps" : 1.54,
"ssdam" : 0.34,
"ammo": 2100
},
{
"id": "e0",
"grp": "mc",
"name": "Enforcer",
"class": 1,
"rating": "F",
"cost": 13984,
"mass": 2,
"power": 0.28,
"mode": "F",
"type": "K",
"damage": 4,
"armourpen": "A",
"rof": 4.3,
"dps": 4,
"thermload": 1,
"clip": 60,
"ammo": 1000
}
]
}

View File

@@ -1,83 +0,0 @@
{
"pa": [
{
"id": "1g",
"grp": "pa",
"class": 2,
"rating": "C",
"cost": 834200,
"mass": 4,
"power": 1.43,
"mode": "F",
"type": "T",
"damage": 7,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 10,
"clip": 5,
"mjdps" : 6.89,
"ssdam" : 27.85,
"ammo": 100
},
{
"id": "2b",
"grp": "pa",
"class": 3,
"rating": "B",
"cost": 3051200,
"mass": 8,
"power": 1.97,
"mode": "F",
"type": "TK",
"damage": 9,
"armourpen": "A",
"rof": 0.3,
"dps": 4,
"thermload": 8,
"clip": 5,
"mjdps" : 20.98,
"ssdam" : 92.82,
"ammo": 100
},
{
"id": "2c",
"grp": "pa",
"class": 4,
"rating": "A",
"cost": 13793600,
"mass": 16,
"power": 2.63,
"mode": "F",
"type": "TK",
"damage": 10,
"armourpen": "A",
"rof": 0.3,
"dps": 5,
"thermload": 10,
"clip": 5,
"mjdps" : 25.55,
"ssdam" : 123.76,
"ammo": 100
},
{
"id": "Ap",
"grp": "pa",
"name": "Advanced",
"class": 3,
"rating": "B",
"cost": 4119120,
"mass": 8,
"power": 1.97,
"mode": "F",
"type": "TK",
"damage": 8,
"armourpen": "A",
"rof": 0.6,
"dps": 4,
"thermload": 4,
"clip": 20,
"ammo": 300
}
]
}

View File

@@ -1,192 +0,0 @@
{
"pl": [
{
"id": "1d",
"grp": "pl",
"class": 3,
"rating": "D",
"cost": 70400,
"mass": 8,
"power": 0.9,
"mode": "F",
"type": "T",
"damage": 4,
"armourpen": "A",
"rof": 3,
"dps": 4,
"mjdps" : 21.62,
"mjeps" : 2.86,
"ssdam" : 7.07,
"thermload": 1
},
{
"id": "1e",
"grp": "pl",
"class": 3,
"rating": "E",
"cost": 140600,
"mass": 8,
"power": 0.92,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.2,
"dps": 4,
"mjdps" : 18.28,
"mjeps" : 2.98,
"ssdam" : 5.59,
"thermload": 1
},
{
"id": "1f",
"grp": "pl",
"class": 3,
"rating": "F",
"cost": 400400,
"mass": 8,
"power": 0.89,
"mode": "T",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 2.3,
"dps": 3,
"mjdps" : 7.05,
"mjeps" : 1.24,
"ssdam" : 3.15,
"thermload": 1
},
{
"id": "1a",
"grp": "pl",
"class": 2,
"rating": "E",
"cost": 17600,
"mass": 4,
"power": 0.6,
"mode": "F",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.4,
"dps": 3,
"mjdps" : 14.29,
"mjeps" : 1.89,
"ssdam" : 4.20,
"thermload": 1
},
{
"id": "1b",
"grp": "pl",
"class": 2,
"rating": "F",
"cost": 35400,
"mass": 4,
"power": 0.6,
"mode": "G",
"type": "T",
"damage": 3,
"armourpen": "A",
"rof": 3.6,
"dps": 3,
"mjdps" : 11.62,
"mjeps" : 1.89,
"ssdam" : 3.24,
"thermload": 1
},
{
"id": "1c",
"grp": "pl",
"class": 2,
"rating": "F",
"cost": 132800,
"mass": 4,
"power": 0.58,
"mode": "T",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 2.5,
"dps": 3,
"mjdps" : 4.72,
"mjeps" : 0.83,
"ssdam" : 1.86,
"thermload": 1
},
{
"id": "17",
"grp": "pl",
"class": 1,
"rating": "F",
"cost": 2200,
"mass": 2,
"power": 0.39,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 3.8,
"dps": 3,
"mjdps" : 9.35,
"mjeps" : 1.24,
"ssdam" : 2.48,
"thermload": 1
},
{
"id": "18",
"grp": "pl",
"class": 1,
"rating": "G",
"cost": 6600,
"mass": 2,
"power": 0.39,
"mode": "G",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 4,
"dps": 3,
"mjdps" : 7.30,
"mjeps" : 1.19,
"ssdam" : 1.88,
"thermload": 1
},
{
"id": "19",
"grp": "pl",
"class": 1,
"rating": "G",
"cost": 26000,
"mass": 2,
"power": 0.38,
"mode": "T",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 2.8,
"dps": 2,
"mjdps" : 2.90,
"mjeps" : 0.51,
"ssdam" : 1.07,
"thermload": 1
},
{
"id": "PL",
"grp": "pl",
"name": "Distruptor",
"class": 2,
"rating": "E",
"cost": 26400,
"mass": 4,
"power": 0.7,
"mode": "F",
"type": "T",
"damage": 2,
"armourpen": "A",
"rof": 1.6,
"dps": 2,
"thermload": 1
}
]
}

View File

@@ -1,63 +0,0 @@
{
"rg": [
{
"id": "29",
"grp": "rg",
"class": 1,
"rating": "D",
"cost": 51600,
"mass": 2,
"power": 1.15,
"mode": "F",
"type": "TK",
"damage": 6,
"armourpen": "A",
"rof": 0.6,
"dps": 4,
"thermload": 7,
"clip": 1,
"mjdps" : 13.75,
"ssdam" : 24.75,
"ammo": 30
},
{
"id": "2a",
"grp": "rg",
"class": 2,
"rating": "B",
"cost": 412800,
"mass": 4,
"power": 1.63,
"mode": "F",
"type": "TK",
"damage": 7,
"armourpen": "A",
"rof": 0.5,
"dps": 4,
"thermload": 10,
"clip": 1,
"mjdps" : 21.66,
"ssdam" : 43.32,
"ammo": 30
},
{
"id": "ih",
"grp": "rg",
"name": "Imperial Hammer",
"class": 2,
"rating": "B",
"cost": 619200,
"mass": 4,
"power": 1.63,
"mode": "F",
"type": "TK",
"damage": 5,
"armourpen": "A",
"rof": 0.6,
"dps": 5,
"thermload": 3,
"clip": 3,
"ammo": 90
}
]
}

View File

@@ -1,59 +0,0 @@
{
"sb": [
{
"id": "08",
"grp": "sb",
"class": 0,
"rating": "E",
"cost": 10000,
"mass": 0.5,
"power": 0.2,
"passive": 1,
"shieldmul": 0.04
},
{
"id": "07",
"grp": "sb",
"class": 0,
"rating": "D",
"cost": 23000,
"mass": 1,
"power": 0.5,
"passive": 1,
"shieldmul": 0.08
},
{
"id": "06",
"grp": "sb",
"class": 0,
"rating": "C",
"cost": 53000,
"mass": 2,
"power": 0.7,
"passive": 1,
"shieldmul": 0.12
},
{
"id": "05",
"grp": "sb",
"class": 0,
"rating": "B",
"cost": 122000,
"mass": 3,
"power": 1,
"passive": 1,
"shieldmul": 0.16
},
{
"id": "04",
"grp": "sb",
"class": 0,
"rating": "A",
"cost": 281000,
"mass": 3.5,
"power": 1.2,
"passive": 1,
"shieldmul": 0.2
}
]
}

View File

@@ -1,36 +0,0 @@
{
"tp": [
{
"id": "2h",
"grp": "tp",
"class": 1,
"rating": "I",
"cost": 11200,
"mass": 2,
"power": 0.4,
"mode": "F",
"armourpen": "C",
"thermload": 10,
"grp": "tp",
"clip": 1,
"ammo": 1,
"missile": "S"
},
{
"id": "2i",
"grp": "tp",
"class": 2,
"rating": "I",
"cost": 44800,
"mass": 4,
"power": 0.4,
"mode": "F",
"armourpen": "C",
"thermload": 10,
"grp": "tp",
"clip": 2,
"ammo": 1,
"missile": "S"
}
]
}

View File

@@ -1,404 +0,0 @@
{
"am": [
{
"id": "1f",
"grp": "am",
"class": 8,
"rating": "E",
"cost": 612220,
"power": 1.8,
"ammo": 10000,
"repair": 120
},
{
"id": "1e",
"grp": "am",
"class": 8,
"rating": "D",
"cost": 1836660,
"power": 2.4,
"ammo": 9000,
"repair": 144
},
{
"id": "1d",
"grp": "am",
"class": 8,
"rating": "C",
"cost": 5509980,
"power": 3,
"ammo": 10000,
"repair": 200
},
{
"id": "1c",
"grp": "am",
"class": 8,
"rating": "B",
"cost": 16529941,
"power": 3.45,
"ammo": 12000,
"repair": 276
},
{
"id": "1b",
"grp": "am",
"class": 8,
"rating": "A",
"cost": 49589823,
"power": 4.2,
"ammo": 11000,
"repair": 308
},
{
"id": "1a",
"grp": "am",
"class": 7,
"rating": "E",
"cost": 340122,
"power": 1.58,
"ammo": 8700,
"repair": 104.4
},
{
"id": "19",
"grp": "am",
"class": 7,
"rating": "D",
"cost": 1020367,
"power": 2.1,
"ammo": 7800,
"repair": 124.8
},
{
"id": "18",
"grp": "am",
"class": 7,
"rating": "C",
"cost": 3061100,
"power": 2.63,
"ammo": 8700,
"repair": 174
},
{
"id": "17",
"grp": "am",
"class": 7,
"rating": "B",
"cost": 9183300,
"power": 3.02,
"ammo": 10400,
"repair": 239.2
},
{
"id": "16",
"grp": "am",
"class": 7,
"rating": "A",
"cost": 27549901,
"power": 3.68,
"ammo": 9600,
"repair": 268.8
},
{
"id": "15",
"grp": "am",
"class": 6,
"rating": "E",
"cost": 188957,
"power": 1.4,
"ammo": 7400,
"repair": 88.8
},
{
"id": "14",
"grp": "am",
"class": 6,
"rating": "D",
"cost": 566870,
"power": 1.86,
"ammo": 6700,
"repair": 107.2
},
{
"id": "13",
"grp": "am",
"class": 6,
"rating": "C",
"cost": 1700611,
"power": 2.33,
"ammo": 7400,
"repair": 148
},
{
"id": "12",
"grp": "am",
"class": 6,
"rating": "B",
"cost": 5101834,
"power": 2.67,
"ammo": 8900,
"repair": 204.7
},
{
"id": "11",
"grp": "am",
"class": 6,
"rating": "A",
"cost": 15305501,
"power": 3.26,
"ammo": 8100,
"repair": 226.8
},
{
"id": "10",
"grp": "am",
"class": 5,
"rating": "E",
"cost": 104976,
"power": 1.17,
"ammo": 6100,
"repair": 73.2
},
{
"id": "0v",
"grp": "am",
"class": 5,
"rating": "D",
"cost": 314928,
"power": 1.56,
"ammo": 5500,
"repair": 88
},
{
"id": "0u",
"grp": "am",
"class": 5,
"rating": "C",
"cost": 944784,
"power": 1.95,
"ammo": 6100,
"repair": 122
},
{
"id": "0t",
"grp": "am",
"class": 5,
"rating": "B",
"cost": 2834352,
"power": 2.24,
"ammo": 7300,
"repair": 167.9
},
{
"id": "0s",
"grp": "am",
"class": 5,
"rating": "A",
"cost": 8503056,
"power": 2.73,
"ammo": 6700,
"repair": 187.6
},
{
"id": "0r",
"grp": "am",
"class": 4,
"rating": "E",
"cost": 58320,
"power": 0.99,
"ammo": 4900,
"repair": 58.8
},
{
"id": "0q",
"grp": "am",
"class": 4,
"rating": "D",
"cost": 174960,
"power": 1.32,
"ammo": 4400,
"repair": 70.4
},
{
"id": "0p",
"grp": "am",
"class": 4,
"rating": "C",
"cost": 524880,
"power": 1.65,
"ammo": 4900,
"repair": 98
},
{
"id": "0o",
"grp": "am",
"class": 4,
"rating": "B",
"cost": 1574640,
"power": 1.9,
"ammo": 5900,
"repair": 135.7
},
{
"id": "0n",
"grp": "am",
"class": 4,
"rating": "A",
"cost": 4723920,
"power": 2.31,
"ammo": 5400,
"repair": 151.2
},
{
"id": "0m",
"grp": "am",
"class": 3,
"rating": "E",
"cost": 32400,
"power": 0.81,
"ammo": 3600,
"repair": 43.2
},
{
"id": "0l",
"grp": "am",
"class": 3,
"rating": "D",
"cost": 97200,
"power": 1.08,
"ammo": 3200,
"repair": 51.2
},
{
"id": "0k",
"grp": "am",
"class": 3,
"rating": "C",
"cost": 291600,
"power": 1.35,
"ammo": 3600,
"repair": 72
},
{
"id": "0j",
"grp": "am",
"class": 3,
"rating": "B",
"cost": 874800,
"power": 1.55,
"ammo": 4300,
"repair": 98.9
},
{
"id": "0i",
"grp": "am",
"class": 3,
"rating": "A",
"cost": 2624400,
"power": 1.89,
"ammo": 4000,
"repair": 112
},
{
"id": "0h",
"grp": "am",
"class": 2,
"rating": "E",
"cost": 18000,
"power": 0.68,
"ammo": 2300,
"repair": 27.6
},
{
"id": "0g",
"grp": "am",
"class": 2,
"rating": "D",
"cost": 54000,
"power": 0.9,
"ammo": 2100,
"repair": 33.6
},
{
"id": "0f",
"grp": "am",
"class": 2,
"rating": "C",
"cost": 162000,
"power": 1.13,
"ammo": 2300,
"repair": 46
},
{
"id": "0e",
"grp": "am",
"class": 2,
"rating": "B",
"cost": 486000,
"power": 1.29,
"ammo": 2800,
"repair": 64.4
},
{
"id": "0d",
"grp": "am",
"class": 2,
"rating": "A",
"cost": 1458000,
"power": 1.58,
"ammo": 2500,
"repair": 70
},
{
"id": "0c",
"grp": "am",
"class": 1,
"rating": "E",
"cost": 10000,
"power": 0.54,
"ammo": 1000,
"repair": 12
},
{
"id": "0b",
"grp": "am",
"class": 1,
"rating": "D",
"cost": 30000,
"power": 0.72,
"ammo": 900,
"repair": 14.4
},
{
"id": "0a",
"grp": "am",
"class": 1,
"rating": "C",
"cost": 90000,
"power": 0.9,
"ammo": 1000,
"repair": 20
},
{
"id": "09",
"grp": "am",
"class": 1,
"rating": "B",
"cost": 270000,
"power": 1.04,
"ammo": 1200,
"repair": 27.6
},
{
"id": "08",
"grp": "am",
"class": 1,
"rating": "A",
"cost": 810000,
"power": 1.26,
"ammo": 1100,
"repair": 30.8
}
]
}

View File

@@ -1,12 +0,0 @@
{
"cr": [
{ "id": "00", "grp": "cr", "class": 1, "rating": "E", "cost": 1000, "capacity": 2 },
{ "id": "01", "grp": "cr", "class": 2, "rating": "E", "cost": 3250, "capacity": 4 },
{ "id": "02", "grp": "cr", "class": 3, "rating": "E", "cost": 10563, "capacity": 8 },
{ "id": "03", "grp": "cr", "class": 4, "rating": "E", "cost": 34328, "capacity": 16 },
{ "id": "04", "grp": "cr", "class": 5, "rating": "E", "cost": 111566, "capacity": 32 },
{ "id": "05", "grp": "cr", "class": 6, "rating": "E", "cost": 362591, "capacity": 64 },
{ "id": "06", "grp": "cr", "class": 7, "rating": "E", "cost": 1178420, "capacity": 128 },
{ "id": "07", "grp": "cr", "class": 8, "rating": "E", "cost": 3829866, "capacity": 256 }
]
}

View File

@@ -1,27 +0,0 @@
{
"cc": [
{ "id": "Cf", "grp":"cc", "class":7, "rating":"E", "cost": 437400, "mass": 32.0, "power":0.41, "range":1.36, "maximum": 4, "time":300 },
{ "id": "Cg", "grp":"cc", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.55, "range":1.02, "maximum": 4, "time":600 },
{ "id": "Ch", "grp":"cc", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range":1.70, "maximum": 4, "time":510 },
{ "id": "Ci", "grp":"cc", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.83, "range":2.38, "maximum": 4, "time":420 },
{ "id": "Cj", "grp":"cc", "class":7, "rating":"A", "cost":6998400, "mass":128.0, "power":0.97, "range":2.04, "maximum": 4, "time":720 },
{ "id": "Ca", "grp":"cc", "class":5, "rating":"E", "cost": 48600, "mass": 8.0, "power":0.30, "range":1.04, "maximum": 3, "time":300 },
{ "id": "Cb", "grp":"cc", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.40, "range":0.78, "maximum": 3, "time":600 },
{ "id": "Cc", "grp":"cc", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range":1.30, "maximum": 3, "time":510 },
{ "id": "Cd", "grp":"cc", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.60, "range":1.82, "maximum": 3, "time":420 },
{ "id": "Ce", "grp":"cc", "class":5, "rating":"A", "cost": 777600, "mass": 32.0, "power":0.70, "range":1.56, "maximum": 3, "time":720 },
{ "id": "C6", "grp":"cc", "class":3, "rating":"E", "cost": 5400, "mass": 2.0, "power":0.20, "range":0.88, "maximum": 2, "time":300 },
{ "id": "C7", "grp":"cc", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.27, "range":0.66, "maximum": 2, "time":600 },
{ "id": "C8", "grp":"cc", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range":1.10, "maximum": 2, "time":510 },
{ "id": "C9", "grp":"cc", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.41, "range":1.54, "maximum": 2, "time":420 },
{ "id": "C0", "grp":"cc", "class":3, "rating":"A", "cost": 86400, "mass": 8.0, "power":0.48, "range":1.32, "maximum": 2, "time":720 },
{ "id": "C1", "grp":"cc", "class":1, "rating":"E", "cost": 600, "mass": 0.5, "power":0.14, "range":0.80, "maximum": 1, "time":300 },
{ "id": "C2", "grp":"cc", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.18, "range":0.60, "maximum": 1, "time":600 },
{ "id": "C3", "grp":"cc", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range":1.00, "maximum": 1, "time":510 },
{ "id": "C4", "grp":"cc", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.28, "range":1.40, "maximum": 1, "time":420 },
{ "id": "C5", "grp":"cc", "class":1, "rating":"A", "cost": 9600, "mass": 2.0, "power":0.32, "range":1.20, "maximum": 1, "time":720 }
]
}

View File

@@ -1,13 +0,0 @@
{
"dc": [
{
"id": "24",
"grp": "dc",
"name": "Standard Docking Computer",
"class": 1,
"rating": "E",
"cost": 4500,
"power": 0.39
}
]
}

View File

@@ -1,204 +0,0 @@
{
"fi": [
{
"id": "6p",
"grp": "fi",
"class": 4,
"rating": "E",
"cost": 263424,
"mass": 10,
"power": 0.25,
"rangeRating": "B"
},
{
"id": "6o",
"grp": "fi",
"class": 4,
"rating": "D",
"cost": 790272,
"mass": 4,
"power": 0.33,
"rangeRating": "A"
},
{
"id": "6n",
"grp": "fi",
"class": 4,
"rating": "C",
"cost": 2370816,
"mass": 10,
"power": 0.41,
"rangeRating": "A"
},
{
"id": "6m",
"grp": "fi",
"class": 4,
"rating": "B",
"cost": 7112448,
"mass": 16,
"power": 0.49,
"rangeRating": "A"
},
{
"id": "6l",
"grp": "fi",
"class": 4,
"rating": "A",
"cost": 21337344,
"mass": 10,
"power": 0.57,
"rangeRating": "A"
},
{
"id": "6k",
"grp": "fi",
"class": 3,
"rating": "E",
"cost": 94080,
"mass": 5,
"power": 0.2,
"rangeRating": "C"
},
{
"id": "6j",
"grp": "fi",
"class": 3,
"rating": "D",
"cost": 282240,
"mass": 2,
"power": 0.27,
"rangeRating": "B"
},
{
"id": "6i",
"grp": "fi",
"class": 3,
"rating": "C",
"cost": 846720,
"mass": 5,
"power": 0.34,
"rangeRating": "B"
},
{
"id": "6h",
"grp": "fi",
"class": 3,
"rating": "B",
"cost": 2540160,
"mass": 8,
"power": 0.41,
"rangeRating": "B"
},
{
"id": "6g",
"grp": "fi",
"class": 3,
"rating": "A",
"cost": 7620480,
"mass": 5,
"power": 0.48,
"rangeRating": "A"
},
{
"id": "6f",
"grp": "fi",
"class": 2,
"rating": "E",
"cost": 33600,
"mass": 2.5,
"power": 0.17,
"rangeRating": "D"
},
{
"id": "6e",
"grp": "fi",
"class": 2,
"rating": "D",
"cost": 100800,
"mass": 1,
"power": 0.22,
"rangeRating": "C"
},
{
"id": "6d",
"grp": "fi",
"class": 2,
"rating": "C",
"cost": 302400,
"mass": 2.5,
"power": 0.28,
"rangeRating": "C"
},
{
"id": "6c",
"grp": "fi",
"class": 2,
"rating": "B",
"cost": 907200,
"mass": 4,
"power": 0.34,
"rangeRating": "C"
},
{
"id": "6b",
"grp": "fi",
"class": 2,
"rating": "A",
"cost": 2721600,
"mass": 2.5,
"power": 0.39,
"rangeRating": "B"
},
{
"id": "6a",
"grp": "fi",
"class": 1,
"rating": "E",
"cost": 12000,
"mass": 1.3,
"power": 0.14,
"rangeRating": "E"
},
{
"id": "69",
"grp": "fi",
"class": 1,
"rating": "D",
"cost": 36000,
"mass": 0.5,
"power": 0.18,
"rangeRating": "D"
},
{
"id": "68",
"grp": "fi",
"class": 1,
"rating": "C",
"cost": 108000,
"mass": 1.3,
"power": 0.23,
"rangeRating": "D"
},
{
"id": "67",
"grp": "fi",
"class": 1,
"rating": "B",
"cost": 324000,
"mass": 2,
"power": 0.28,
"rangeRating": "D"
},
{
"id": "66",
"grp": "fi",
"class": 1,
"rating": "A",
"cost": 972000,
"mass": 1.3,
"power": 0.32,
"rangeRating": "C"
}
]
}

View File

@@ -1,364 +0,0 @@
{
"fs": [
{
"id": "3q",
"grp": "fs",
"class": 8,
"rating": "E",
"cost": 1083910,
"power": 0.48,
"rate": 720
},
{
"id": "3p",
"grp": "fs",
"class": 8,
"rating": "D",
"cost": 4516291,
"power": 0.64,
"rate": 960
},
{
"id": "3o",
"grp": "fs",
"class": 8,
"rating": "C",
"cost": 18065165,
"power": 0.8,
"rate": 1200
},
{
"id": "3n",
"grp": "fs",
"class": 8,
"rating": "B",
"cost": 72260660,
"power": 0.96,
"rate": 1440
},
{
"id": "3m",
"grp": "fs",
"class": 8,
"rating": "A",
"cost": 289042541,
"power": 1.12,
"rate": 1680
},
{
"id": "3l",
"grp": "fs",
"class": 7,
"rating": "E",
"cost": 341927,
"power": 0.41,
"rate": 534
},
{
"id": "3k",
"grp": "fs",
"class": 7,
"rating": "D",
"cost": 1424698,
"power": 0.55,
"rate": 712
},
{
"id": "3j",
"grp": "fs",
"class": 7,
"rating": "C",
"cost": 5698790,
"power": 0.69,
"rate": 890
},
{
"id": "3i",
"grp": "fs",
"class": 7,
"rating": "B",
"cost": 22795161,
"power": 0.83,
"rate": 1068
},
{
"id": "3h",
"grp": "fs",
"class": 7,
"rating": "A",
"cost": 91180644,
"power": 0.97,
"rate": 1245
},
{
"id": "3g",
"grp": "fs",
"class": 6,
"rating": "E",
"cost": 107864,
"power": 0.35,
"rate": 376
},
{
"id": "3f",
"grp": "fs",
"class": 6,
"rating": "D",
"cost": 449431,
"power": 0.47,
"rate": 502
},
{
"id": "3e",
"grp": "fs",
"class": 6,
"rating": "C",
"cost": 1797726,
"power": 0.59,
"rate": 627
},
{
"id": "3d",
"grp": "fs",
"class": 6,
"rating": "B",
"cost": 7190903,
"power": 0.71,
"rate": 752
},
{
"id": "3c",
"grp": "fs",
"class": 6,
"rating": "A",
"cost": 28763610,
"power": 0.83,
"rate": 878
},
{
"id": "3b",
"grp": "fs",
"class": 5,
"rating": "E",
"cost": 34026,
"power": 0.3,
"rate": 247
},
{
"id": "3a",
"grp": "fs",
"class": 5,
"rating": "D",
"cost": 141776,
"power": 0.4,
"rate": 330
},
{
"id": "39",
"grp": "fs",
"class": 5,
"rating": "C",
"cost": 567106,
"power": 0.5,
"rate": 412
},
{
"id": "38",
"grp": "fs",
"class": 5,
"rating": "B",
"cost": 2268424,
"power": 0.6,
"rate": 494
},
{
"id": "37",
"grp": "fs",
"class": 5,
"rating": "A",
"cost": 9073694,
"power": 0.7,
"rate": 577
},
{
"id": "36",
"grp": "fs",
"class": 4,
"rating": "E",
"cost": 10734,
"power": 0.25,
"rate": 147
},
{
"id": "35",
"grp": "fs",
"class": 4,
"rating": "D",
"cost": 44724,
"power": 0.33,
"rate": 196
},
{
"id": "34",
"grp": "fs",
"class": 4,
"rating": "C",
"cost": 178898,
"power": 0.41,
"rate": 245
},
{
"id": "33",
"grp": "fs",
"class": 4,
"rating": "B",
"cost": 715591,
"power": 0.49,
"rate": 294
},
{
"id": "32",
"grp": "fs",
"class": 4,
"rating": "A",
"cost": 2862364,
"power": 0.57,
"rate": 342
},
{
"id": "31",
"grp": "fs",
"class": 3,
"rating": "E",
"cost": 3386,
"power": 0.2,
"rate": 75
},
{
"id": "30",
"grp": "fs",
"class": 3,
"rating": "D",
"cost": 14109,
"power": 0.27,
"rate": 100
},
{
"id": "2v",
"grp": "fs",
"class": 3,
"rating": "C",
"cost": 56435,
"power": 0.34,
"rate": 126
},
{
"id": "2u",
"grp": "fs",
"class": 3,
"rating": "B",
"cost": 225738,
"power": 0.41,
"rate": 151
},
{
"id": "2t",
"grp": "fs",
"class": 3,
"rating": "A",
"cost": 902954,
"power": 0.48,
"rate": 176
},
{
"id": "2s",
"grp": "fs",
"class": 2,
"rating": "E",
"cost": 1068,
"power": 0.17,
"rate": 32
},
{
"id": "2r",
"grp": "fs",
"class": 2,
"rating": "D",
"cost": 4451,
"power": 0.22,
"rate": 43
},
{
"id": "2q",
"grp": "fs",
"class": 2,
"rating": "C",
"cost": 17803,
"power": 0.28,
"rate": 54
},
{
"id": "2p",
"grp": "fs",
"class": 2,
"rating": "B",
"cost": 71211,
"power": 0.34,
"rate": 65
},
{
"id": "2o",
"grp": "fs",
"class": 2,
"rating": "A",
"cost": 284844,
"power": 0.39,
"rate": 75
},
{
"id": "2n",
"grp": "fs",
"class": 1,
"rating": "E",
"cost": 309,
"power": 0.14,
"rate": 18
},
{
"id": "2m",
"grp": "fs",
"class": 1,
"rating": "D",
"cost": 1285,
"power": 0.18,
"rate": 24
},
{
"id": "2l",
"grp": "fs",
"class": 1,
"rating": "C",
"cost": 5142,
"power": 0.23,
"rate": 30
},
{
"id": "2k",
"grp": "fs",
"class": 1,
"rating": "B",
"cost": 20568,
"power": 0.28,
"rate": 36
},
{
"id": "2j",
"grp": "fs",
"class": 1,
"rating": "A",
"cost": 82270,
"power": 0.32,
"rate": 42
}
]
}

View File

@@ -1,27 +0,0 @@
{
"fx": [
{ "id": "Ff", "grp":"fx", "class":7, "rating":"E", "cost": 437400, "mass": 80.0, "power":0.55, "range":1.02, "maximum": 8 },
{ "id": "Fg", "grp":"fx", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.41, "range":1.36, "maximum": 8 },
{ "id": "Fh", "grp":"fx", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range":1.70, "maximum": 8 },
{ "id": "Fi", "grp":"fx", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.97, "range":2.04, "maximum": 8 },
{ "id": "Fj", "grp":"fx", "class":7, "rating":"A", "cost":6998400, "mass": 80.0, "power":0.83, "range":2.38, "maximum": 8 },
{ "id": "Fa", "grp":"fx", "class":5, "rating":"E", "cost": 48600, "mass": 20.0, "power":0.40, "range":0.78, "maximum": 4 },
{ "id": "Fb", "grp":"fx", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.30, "range":1.04, "maximum": 4 },
{ "id": "Fc", "grp":"fx", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range":1.30, "maximum": 4 },
{ "id": "Fd", "grp":"fx", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.97, "range":1.56, "maximum": 4 },
{ "id": "Fe", "grp":"fx", "class":5, "rating":"A", "cost": 777600, "mass": 20.0, "power":0.60, "range":1.82, "maximum": 4 },
{ "id": "F5", "grp":"fx", "class":3, "rating":"E", "cost": 5400, "mass": 5.0, "power":0.27, "range":0.66, "maximum": 2 },
{ "id": "F6", "grp":"fx", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.20, "range":0.88, "maximum": 2 },
{ "id": "F7", "grp":"fx", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range":1.10, "maximum": 2 },
{ "id": "F8", "grp":"fx", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.48, "range":1.32, "maximum": 2 },
{ "id": "F9", "grp":"fx", "class":3, "rating":"A", "cost": 86400, "mass": 5.0, "power":0.41, "range":1.54, "maximum": 2 },
{ "id": "F0", "grp":"fx", "class":1, "rating":"E", "cost": 600, "mass": 1.3, "power":0.18, "range":0.60, "maximum": 1 },
{ "id": "F1", "grp":"fx", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.14, "range":0.80, "maximum": 1 },
{ "id": "F2", "grp":"fx", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range":1.00, "maximum": 1 },
{ "id": "F3", "grp":"fx", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.32, "range":1.20, "maximum": 1 },
{ "id": "F4", "grp":"fx", "class":1, "rating":"A", "cost": 9600, "mass": 1.3, "power":0.28, "range":1.40, "maximum": 1 }
]
}

View File

@@ -1,224 +0,0 @@
{
"hb": [
{
"id": "7d",
"grp": "hb",
"class": 7,
"rating": "E",
"cost": 437400,
"power": 0.42,
"range": 2.58,
"maximum": 18,
"time": 25
},
{
"id": "7c",
"grp": "hb",
"class": 7,
"rating": "D",
"cost": 874800,
"power": 0.56,
"range": 3.44,
"maximum": 12,
"time": 22
},
{
"id": "7b",
"grp": "hb",
"class": 7,
"rating": "C",
"cost": 1749600,
"power": 0.7,
"range": 4.3,
"maximum": 15,
"time": 18
},
{
"id": "7a",
"grp": "hb",
"class": 7,
"rating": "B",
"cost": 3499200,
"power": 0.84,
"range": 5.16,
"maximum": 18,
"time": 14
},
{
"id": "79",
"grp": "hb",
"class": 7,
"rating": "A",
"cost": 6998400,
"power": 0.98,
"range": 6.02,
"maximum": 12,
"time": 11
},
{
"id": "78",
"grp": "hb",
"class": 5,
"rating": "E",
"cost": 48600,
"power": 0.3,
"range": 1.98,
"maximum": 9,
"time": 31
},
{
"id": "77",
"grp": "hb",
"class": 5,
"rating": "D",
"cost": 97200,
"power": 0.4,
"range": 2.64,
"maximum": 6,
"time": 26
},
{
"id": "76",
"grp": "hb",
"class": 5,
"rating": "C",
"cost": 194400,
"power": 0.5,
"range": 3.3,
"maximum": 7,
"time": 22
},
{
"id": "75",
"grp": "hb",
"class": 5,
"rating": "B",
"cost": 388800,
"power": 0.6,
"range": 3.96,
"maximum": 9,
"time": 18
},
{
"id": "74",
"grp": "hb",
"class": 5,
"rating": "A",
"cost": 777600,
"power": 0.7,
"range": 4.62,
"maximum": 6,
"time": 13
},
{
"id": "73",
"grp": "hb",
"class": 3,
"rating": "E",
"cost": 5400,
"power": 0.18,
"range": 1.62,
"maximum": 4,
"time": 36
},
{
"id": "72",
"grp": "hb",
"class": 3,
"rating": "D",
"cost": 10800,
"power": 0.24,
"range": 2.16,
"maximum": 3,
"time": 31
},
{
"id": "71",
"grp": "hb",
"class": 3,
"rating": "C",
"cost": 21600,
"power": 0.3,
"range": 2.7,
"maximum": 3,
"time": 26
},
{
"id": "70",
"grp": "hb",
"class": 3,
"rating": "B",
"cost": 43200,
"power": 0.36,
"range": 3.24,
"maximum": 4,
"time": 21
},
{
"id": "6v",
"grp": "hb",
"class": 3,
"rating": "A",
"cost": 86400,
"power": 0.42,
"range": 3.78,
"maximum": 3,
"time": 16
},
{
"id": "6u",
"grp": "hb",
"class": 1,
"rating": "E",
"cost": 600,
"power": 0.12,
"range": 1.5,
"maximum": 2,
"time": 42
},
{
"id": "6t",
"grp": "hb",
"class": 1,
"rating": "D",
"cost": 1200,
"power": 0.16,
"range": 2,
"maximum": 1,
"time": 36
},
{
"id": "6s",
"grp": "hb",
"class": 1,
"rating": "C",
"cost": 2400,
"power": 0.2,
"range": 2.5,
"maximum": 1,
"time": 30
},
{
"id": "6r",
"grp": "hb",
"class": 1,
"rating": "B",
"cost": 4800,
"power": 0.24,
"range": 3,
"maximum": 2,
"time": 24
},
{
"id": "6q",
"grp": "hb",
"class": 1,
"rating": "A",
"cost": 9600,
"power": 0.28,
"range": 3.5,
"maximum": 1,
"time": 18
}
]
}

View File

@@ -1,94 +0,0 @@
{
"hr": [
{
"id": "2e",
"grp": "hr",
"class": 5,
"rating": "E",
"cost": 150000,
"mass": 64,
"armouradd": 160
},
{
"id": "2d",
"grp": "hr",
"class": 5,
"rating": "D",
"cost": 450000,
"mass": 32,
"armouradd": 240
},
{
"id": "2c",
"grp": "hr",
"class": 4,
"rating": "E",
"cost": 65000,
"mass": 32,
"armouradd": 80
},
{
"id": "2b",
"grp": "hr",
"class": 4,
"rating": "D",
"cost": 195000,
"mass": 16,
"armouradd": 120
},
{
"id": "2a",
"grp": "hr",
"class": 3,
"rating": "E",
"cost": 28000,
"mass": 16,
"armouradd": 40
},
{
"id": "29",
"grp": "hr",
"class": 3,
"rating": "D",
"cost": 84000,
"mass": 8,
"armouradd": 60
},
{
"id": "28",
"grp": "hr",
"class": 2,
"rating": "E",
"cost": 12000,
"mass": 8,
"armouradd": 20
},
{
"id": "27",
"grp": "hr",
"class": 2,
"rating": "D",
"cost": 36000,
"mass": 4,
"armouradd": 30
},
{
"id": "26",
"grp": "hr",
"class": 1,
"rating": "E",
"cost": 5000,
"mass": 4,
"armouradd": 10
},
{
"id": "25",
"grp": "hr",
"class": 1,
"rating": "D",
"cost": 15000,
"mass": 2,
"armouradd": 15
}
]
}

View File

@@ -1,12 +0,0 @@
{
"ft": [
{ "id": "f1", "grp": "ft", "class": 1, "rating": "C", "cost": 1000, "capacity": 2 },
{ "id": "f2", "grp": "ft", "class": 2, "rating": "C", "cost": 3750, "capacity": 4 },
{ "id": "f3", "grp": "ft", "class": 3, "rating": "C", "cost": 7063, "capacity": 8 },
{ "id": "f4", "grp": "ft", "class": 4, "rating": "C", "cost": 24734, "capacity": 16 },
{ "id": "f5", "grp": "ft", "class": 5, "rating": "C", "cost": 97754, "capacity": 32 },
{ "id": "f6", "grp": "ft", "class": 6, "rating": "C", "cost": 341577, "capacity": 64 },
{ "id": "f7", "grp": "ft", "class": 7, "rating": "C", "cost": 1780900, "capacity": 128 },
{ "id": "f8", "grp": "ft", "class": 8, "rating": "C", "cost": 5428400, "capacity": 256 }
]
}

View File

@@ -1,12 +0,0 @@
{
"psg": [
{ "id": "p6", "grp": "psg", "class": 1, "rating": "A", "cost": 132195, "mass": 2.5, "power": 2.52, "minmass": 13, "optmass": 25, "maxmass": 63, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p5", "grp": "psg", "class": 2, "rating": "A", "cost": 240336, "mass": 5, "power": 3.15, "minmass": 23, "optmass": 55, "maxmass": 138, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p4", "grp": "psg", "class": 3, "rating": "A", "cost": 761868, "mass": 10, "power": 3.78, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p3", "grp": "psg", "class": 4, "rating": "A", "cost": 2415120, "mass": 20, "power": 4.62, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p2", "grp": "psg", "class": 5, "rating": "A", "cost": 7655930, "mass": 40, "power": 5.46, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p1", "grp": "psg", "class": 6, "rating": "A", "cost": 24269297, "mass": 80, "power": 6.51, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p0", "grp": "psg", "class": 7, "rating": "A", "cost": 76933668, "mass": 160, "power": 7.35, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 },
{ "id": "p7", "grp": "psg", "class": 8, "rating": "A", "cost": 243879729, "mass": 320, "power": 8.4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 2.04, "optmul": 1.44, "maxmul": 0.84 }
]
}

View File

@@ -1,27 +0,0 @@
{
"pc": [
{ "id": "Pf", "grp":"pc", "class":7, "rating":"E", "cost": 437400, "mass": 80.0, "power":0.55, "range": 5.10, "maximum": 8 },
{ "id": "Pg", "grp":"pc", "class":7, "rating":"D", "cost": 874800, "mass": 32.0, "power":0.41, "range": 6.80, "maximum": 8 },
{ "id": "Ph", "grp":"pc", "class":7, "rating":"C", "cost":1749600, "mass": 80.0, "power":0.69, "range": 8.50, "maximum": 8 },
{ "id": "Pi", "grp":"pc", "class":7, "rating":"B", "cost":3499200, "mass":128.0, "power":0.97, "range":10.20, "maximum": 8 },
{ "id": "Pj", "grp":"pc", "class":7, "rating":"A", "cost":6998400, "mass": 80.0, "power":0.83, "range":11.90, "maximum": 8 },
{ "id": "Pa", "grp":"pc", "class":5, "rating":"E", "cost": 48600, "mass": 20.0, "power":0.40, "range": 3.90, "maximum": 4 },
{ "id": "Pb", "grp":"pc", "class":5, "rating":"D", "cost": 97200, "mass": 8.0, "power":0.30, "range": 5.20, "maximum": 4 },
{ "id": "Pc", "grp":"pc", "class":5, "rating":"C", "cost": 194400, "mass": 20.0, "power":0.50, "range": 6.50, "maximum": 4 },
{ "id": "Pd", "grp":"pc", "class":5, "rating":"B", "cost": 388800, "mass": 32.0, "power":0.97, "range": 7.80, "maximum": 4 },
{ "id": "Pe", "grp":"pc", "class":5, "rating":"A", "cost": 777600, "mass": 20.0, "power":0.60, "range": 9.10, "maximum": 4 },
{ "id": "P5", "grp":"pc", "class":3, "rating":"E", "cost": 5400, "mass": 5.0, "power":0.27, "range": 3.30, "maximum": 2 },
{ "id": "P6", "grp":"pc", "class":3, "rating":"D", "cost": 10800, "mass": 2.0, "power":0.20, "range": 4.40, "maximum": 2 },
{ "id": "P7", "grp":"pc", "class":3, "rating":"C", "cost": 21600, "mass": 5.0, "power":0.34, "range": 5.50, "maximum": 2 },
{ "id": "P8", "grp":"pc", "class":3, "rating":"B", "cost": 43200, "mass": 8.0, "power":0.48, "range": 6.60, "maximum": 2 },
{ "id": "P9", "grp":"pc", "class":3, "rating":"A", "cost": 86400, "mass": 5.0, "power":0.41, "range": 7.70, "maximum": 2 },
{ "id": "P0", "grp":"pc", "class":1, "rating":"E", "cost": 600, "mass": 1.3, "power":0.18, "range": 3.00, "maximum": 1 },
{ "id": "P1", "grp":"pc", "class":1, "rating":"D", "cost": 1200, "mass": 0.5, "power":0.14, "range": 4.00, "maximum": 1 },
{ "id": "P2", "grp":"pc", "class":1, "rating":"C", "cost": 2400, "mass": 1.3, "power":0.23, "range": 5.00, "maximum": 1 },
{ "id": "P3", "grp":"pc", "class":1, "rating":"B", "cost": 4800, "mass": 2.0, "power":0.32, "range": 6.00, "maximum": 1 },
{ "id": "P4", "grp":"pc", "class":1, "rating":"A", "cost": 9600, "mass": 1.3, "power":0.28, "range": 7.00, "maximum": 1 }
]
}

View File

@@ -1,184 +0,0 @@
{
"rf": [
{
"id": "23",
"grp": "rf",
"class": 4,
"rating": "E",
"cost": 55566,
"power": 0.25,
"bins": 4
},
{
"id": "22",
"grp": "rf",
"class": 4,
"rating": "D",
"cost": 166698,
"power": 0.33,
"bins": 5
},
{
"id": "21",
"grp": "rf",
"class": 4,
"rating": "C",
"cost": 500094,
"power": 0.41,
"bins": 7
},
{
"id": "20",
"grp": "rf",
"class": 4,
"rating": "B",
"cost": 1500282,
"power": 0.49,
"bins": 9
},
{
"id": "1v",
"grp": "rf",
"class": 4,
"rating": "A",
"cost": 4500846,
"power": 0.57,
"bins": 10
},
{
"id": "1u",
"grp": "rf",
"class": 3,
"rating": "E",
"cost": 26460,
"power": 0.2,
"bins": 3
},
{
"id": "1t",
"grp": "rf",
"class": 3,
"rating": "D",
"cost": 79380,
"power": 0.27,
"bins": 4
},
{
"id": "1s",
"grp": "rf",
"class": 3,
"rating": "C",
"cost": 238140,
"power": 0.34,
"bins": 6
},
{
"id": "1r",
"grp": "rf",
"class": 3,
"rating": "B",
"cost": 714420,
"power": 0.41,
"bins": 7
},
{
"id": "1q",
"grp": "rf",
"class": 3,
"rating": "A",
"cost": 2143260,
"power": 0.48,
"bins": 8
},
{
"id": "1p",
"grp": "rf",
"class": 2,
"rating": "E",
"cost": 12600,
"power": 0.17,
"bins": 2
},
{
"id": "1o",
"grp": "rf",
"class": 2,
"rating": "D",
"cost": 37800,
"power": 0.22,
"bins": 3
},
{
"id": "1n",
"grp": "rf",
"class": 2,
"rating": "C",
"cost": 113400,
"power": 0.28,
"bins": 4
},
{
"id": "1m",
"grp": "rf",
"class": 2,
"rating": "B",
"cost": 340200,
"power": 0.34,
"bins": 5
},
{
"id": "1l",
"grp": "rf",
"class": 2,
"rating": "A",
"cost": 1020600,
"power": 0.39,
"bins": 6
},
{
"id": "1k",
"grp": "rf",
"class": 1,
"rating": "E",
"cost": 6000,
"power": 0.14,
"bins": 1
},
{
"id": "1j",
"grp": "rf",
"class": 1,
"rating": "D",
"cost": 18000,
"power": 0.18,
"bins": 1
},
{
"id": "1i",
"grp": "rf",
"class": 1,
"rating": "C",
"cost": 54000,
"power": 0.23,
"bins": 2
},
{
"id": "1h",
"grp": "rf",
"class": 1,
"rating": "B",
"cost": 162000,
"power": 0.28,
"bins": 3
},
{
"id": "1g",
"grp": "rf",
"class": 1,
"rating": "A",
"cost": 486000,
"power": 0.32,
"bins": 4
}
]
}

View File

@@ -1,49 +0,0 @@
{
"sc": [
{
"id": "2f",
"grp": "sc",
"name": "Advanced Discovery Scanner",
"class": 1,
"rating": "C",
"cost": 1545000,
"mass": 2,
"power": 0,
"rangeLS": null
},
{
"id": "2g",
"grp": "sc",
"name": "Intermediate Discovery Scanner",
"class": 1,
"rating": "D",
"cost": 505000,
"mass": 2,
"power": 0,
"rangeLS": 1000
},
{
"id": "2h",
"grp": "sc",
"name": "Basic Discovery Scanner",
"class": 1,
"rating": "E",
"cost": 1000,
"mass": 2,
"power": 0,
"rangeLS": 500
},
{
"id": "2i",
"grp": "sc",
"name": "Detailed Surface Scanner",
"class": 1,
"retractedOnly": 1,
"rating": "C",
"cost": 250000,
"mass": 1.3,
"power": 0.6,
"rangeLS": 0.33
}
]
}

View File

@@ -1,44 +0,0 @@
{
"scb": [
{ "id": "65", "grp": "scb", "class": 8, "rating": "E", "cost": 697584, "mass": 160, "power": 1.44, "cells": 6, "rechargeRating": "C", "recharge": 0 },
{ "id": "64", "grp": "scb", "class": 8, "rating": "D", "cost": 1743961, "mass": 64, "power": 1.92, "cells": 4, "rechargeRating": "C", "recharge": 0 },
{ "id": "63", "grp": "scb", "class": 8, "rating": "C", "cost": 4359903, "mass": 160, "power": 2.4, "cells": 5, "rechargeRating": "B", "recharge": 0 },
{ "id": "62", "grp": "scb", "class": 8, "rating": "B", "cost": 10899756, "mass": 256, "power": 2.88, "cells": 6, "rechargeRating": "A", "recharge": 0 },
{ "id": "61", "grp": "scb", "class": 8, "rating": "A", "cost": 27249391, "mass": 160, "power": 3.36, "cells": 5, "rechargeRating": "A", "recharge": 0 },
{ "id": "60", "grp": "scb", "class": 7, "rating": "E", "cost": 249137, "mass": 80, "power": 1.24, "cells": 6, "rechargeRating": "D", "recharge": 97 },
{ "id": "5v", "grp": "scb", "class": 7, "rating": "D", "cost": 622843, "mass": 32, "power": 1.66, "cells": 4, "rechargeRating": "C", "recharge": 130 },
{ "id": "5u", "grp": "scb", "class": 7, "rating": "C", "cost": 1557108, "mass": 80, "power": 2.07, "cells": 5, "rechargeRating": "B", "recharge": 163 },
{ "id": "5t", "grp": "scb", "class": 7, "rating": "B", "cost": 3892770, "mass": 128, "power": 2.48, "cells": 6, "rechargeRating": "B", "recharge": 197 },
{ "id": "5s", "grp": "scb", "class": 7, "rating": "A", "cost": 9731925, "mass": 80, "power": 2.9, "cells": 5, "rechargeRating": "A", "recharge": 230 },
{ "id": "5r", "grp": "scb", "class": 6, "rating": "E", "cost": 88978, "mass": 40, "power": 1.06, "cells": 6, "rechargeRating": "D", "recharge": 92 },
{ "id": "5q", "grp": "scb", "class": 6, "rating": "D", "cost": 222444, "mass": 16, "power": 1.42, "cells": 4, "rechargeRating": "C", "recharge": 120 },
{ "id": "5p", "grp": "scb", "class": 6, "rating": "C", "cost": 556110, "mass": 40, "power": 1.77, "cells": 5, "rechargeRating": "C", "recharge": 148 },
{ "id": "5o", "grp": "scb", "class": 6, "rating": "B", "cost": 1390275, "mass": 64, "power": 2.12, "cells": 6, "rechargeRating": "B", "recharge": 176 },
{ "id": "5n", "grp": "scb", "class": 6, "rating": "A", "cost": 3475688, "mass": 40, "power": 2.48, "cells": 5, "rechargeRating": "A", "recharge": 204 },
{ "id": "5m", "grp": "scb", "class": 5, "rating": "E", "cost": 31778, "mass": 20, "power": 0.9, "cells": 5, "rechargeRating": "D", "recharge": 82 },
{ "id": "5l", "grp": "scb", "class": 5, "rating": "D", "cost": 79444, "mass": 8, "power": 1.2, "cells": 3, "rechargeRating": "C", "recharge": 109 },
{ "id": "5k", "grp": "scb", "class": 5, "rating": "C", "cost": 198611, "mass": 20, "power": 1.5, "cells": 4, "rechargeRating": "C", "recharge": 135 },
{ "id": "5j", "grp": "scb", "class": 5, "rating": "B", "cost": 496527, "mass": 32, "power": 1.8, "cells": 5, "rechargeRating": "B", "recharge": 162 },
{ "id": "5i", "grp": "scb", "class": 5, "rating": "A", "cost": 1241317, "mass": 20, "power": 2.1, "cells": 4, "rechargeRating": "B", "recharge": 189 },
{ "id": "5h", "grp": "scb", "class": 4, "rating": "E", "cost": 11349, "mass": 10, "power": 0.74, "cells": 5, "rechargeRating": "D", "recharge": 72 },
{ "id": "5g", "grp": "scb", "class": 4, "rating": "D", "cost": 28373, "mass": 4, "power": 0.98, "cells": 3, "rechargeRating": "D", "recharge": 94 },
{ "id": "5f", "grp": "scb", "class": 4, "rating": "C", "cost": 70932, "mass": 10, "power": 1.23, "cells": 4, "rechargeRating": "C", "recharge": 117 },
{ "id": "5e", "grp": "scb", "class": 4, "rating": "B", "cost": 177331, "mass": 16, "power": 1.48, "cells": 5, "rechargeRating": "C", "recharge": 140 },
{ "id": "5d", "grp": "scb", "class": 4, "rating": "A", "cost": 443328, "mass": 10, "power": 1.72, "cells": 4, "rechargeRating": "B", "recharge": 163 },
{ "id": "5c", "grp": "scb", "class": 3, "rating": "E", "cost": 4053, "mass": 5, "power": 0.61, "cells": 5, "rechargeRating": "D", "recharge": 61 },
{ "id": "5b", "grp": "scb", "class": 3, "rating": "D", "cost": 10133, "mass": 2, "power": 0.82, "cells": 3, "rechargeRating": "D", "recharge": 80 },
{ "id": "5a", "grp": "scb", "class": 3, "rating": "C", "cost": 25333, "mass": 5, "power": 1.02, "cells": 4, "rechargeRating": "D", "recharge": 100 },
{ "id": "59", "grp": "scb", "class": 3, "rating": "B", "cost": 63333, "mass": 8, "power": 1.22, "cells": 5, "rechargeRating": "C", "recharge": 119 },
{ "id": "58", "grp": "scb", "class": 3, "rating": "A", "cost": 158331, "mass": 5, "power": 1.43, "cells": 4, "rechargeRating": "C", "recharge": 138 },
{ "id": "57", "grp": "scb", "class": 2, "rating": "E", "cost": 1448, "mass": 2.5, "power": 0.5, "cells": 5, "rechargeRating": "E", "recharge": 46 },
{ "id": "56", "grp": "scb", "class": 2, "rating": "D", "cost": 3619, "mass": 1, "power": 0.67, "cells": 3, "rechargeRating": "D", "recharge": 61 },
{ "id": "55", "grp": "scb", "class": 2, "rating": "C", "cost": 9048, "mass": 2.5, "power": 0.84, "cells": 4, "rechargeRating": "D", "recharge": 77 },
{ "id": "54", "grp": "scb", "class": 2, "rating": "B", "cost": 22619, "mass": 4, "power": 1.01, "cells": 5, "rechargeRating": "D", "recharge": 92 },
{ "id": "53", "grp": "scb", "class": 2, "rating": "A", "cost": 56547, "mass": 2.5, "power": 1.18, "cells": 4, "rechargeRating": "C", "recharge": 107 },
{ "id": "52", "grp": "scb", "class": 1, "rating": "E", "cost": 517, "mass": 1.3, "power": 0.41, "cells": 4, "rechargeRating": "E", "recharge": 31 },
{ "id": "51", "grp": "scb", "class": 1, "rating": "D", "cost": 1293, "mass": 0.5, "power": 0.55, "cells": 2, "rechargeRating": "E", "recharge": 41 },
{ "id": "50", "grp": "scb", "class": 1, "rating": "C", "cost": 3231, "mass": 1.3, "power": 0.69, "cells": 3, "rechargeRating": "D", "recharge": 51 },
{ "id": "4v", "grp": "scb", "class": 1, "rating": "B", "cost": 8078, "mass": 2, "power": 0.83, "cells": 4, "rechargeRating": "D", "recharge": 61 },
{ "id": "4u", "grp": "scb", "class": 1, "rating": "A", "cost": 20195, "mass": 1.3, "power": 0.97, "cells": 3, "rechargeRating": "D", "recharge": 72 }
]
}

View File

@@ -1,39 +0,0 @@
{
"sg": [
{ "id": "4t", "grp": "sg", "class": 8, "rating": "E", "cost": 2007241, "mass": 160, "power": 2.4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4s", "grp": "sg", "class": 8, "rating": "D", "cost": 6021722, "mass": 64, "power": 3.2, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4r", "grp": "sg", "class": 8, "rating": "C", "cost": 18065165, "mass": 160, "power": 4, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4q", "grp": "sg", "class": 8, "rating": "B", "cost": 54195495, "mass": 256, "power": 4.8, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4p", "grp": "sg", "class": 8, "rating": "A", "cost": 162586486, "mass": 160, "power": 5.6, "minmass": 900, "optmass": 1800, "maxmass": 4500, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4o", "grp": "sg", "class": 7, "rating": "E", "cost": 633199, "mass": 80, "power": 2.1, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4n", "grp": "sg", "class": 7, "rating": "D", "cost": 1899597, "mass": 32, "power": 2.8, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4m", "grp": "sg", "class": 7, "rating": "C", "cost": 5698790, "mass": 80, "power": 3.5, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4l", "grp": "sg", "class": 7, "rating": "B", "cost": 17096371, "mass": 128, "power": 4.2, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4k", "grp": "sg", "class": 7, "rating": "A", "cost": 51289112, "mass": 80, "power": 4.9, "minmass": 530, "optmass": 1060, "maxmass": 2650, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4j", "grp": "sg", "class": 6, "rating": "E", "cost": 199747, "mass": 40, "power": 1.86, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4i", "grp": "sg", "class": 6, "rating": "D", "cost": 599242, "mass": 16, "power": 2.48, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4h", "grp": "sg", "class": 6, "rating": "C", "cost": 1797726, "mass": 40, "power": 3.1, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4g", "grp": "sg", "class": 6, "rating": "B", "cost": 5393177, "mass": 64, "power": 3.72, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4f", "grp": "sg", "class": 6, "rating": "A", "cost": 16179531, "mass": 40, "power": 4.34, "minmass": 270, "optmass": 540, "maxmass": 1350, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "4e", "grp": "sg", "class": 5, "rating": "E", "cost": 63012, "mass": 20, "power": 1.56, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "4d", "grp": "sg", "class": 5, "rating": "D", "cost": 189035, "mass": 8, "power": 2.08, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "4c", "grp": "sg", "class": 5, "rating": "C", "cost": 567106, "mass": 20, "power": 2.6, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "4b", "grp": "sg", "class": 5, "rating": "B", "cost": 1701318, "mass": 32, "power": 3.12, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "4a", "grp": "sg", "class": 5, "rating": "A", "cost": 5103953, "mass": 20, "power": 3.64, "minmass": 203, "optmass": 405, "maxmass": 1013, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "49", "grp": "sg", "class": 4, "rating": "E", "cost": 19878, "mass": 10, "power": 1.32, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "48", "grp": "sg", "class": 4, "rating": "D", "cost": 59633, "mass": 4, "power": 1.76, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "47", "grp": "sg", "class": 4, "rating": "C", "cost": 178898, "mass": 10, "power": 2.2, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "46", "grp": "sg", "class": 4, "rating": "B", "cost": 536693, "mass": 16, "power": 2.64, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "45", "grp": "sg", "class": 4, "rating": "A", "cost": 1610080, "mass": 10, "power": 3.08, "minmass": 143, "optmass": 285, "maxmass": 713, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "44", "grp": "sg", "class": 3, "rating": "E", "cost": 6271, "mass": 5, "power": 1.08, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "43", "grp": "sg", "class": 3, "rating": "D", "cost": 18812, "mass": 2, "power": 1.44, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "42", "grp": "sg", "class": 3, "rating": "C", "cost": 56435, "mass": 5, "power": 1.8, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "41", "grp": "sg", "class": 3, "rating": "B", "cost": 169304, "mass": 8, "power": 2.16, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "40", "grp": "sg", "class": 3, "rating": "A", "cost": 507912, "mass": 5, "power": 2.52, "minmass": 83, "optmass": 165, "maxmass": 413, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 },
{ "id": "3v", "grp": "sg", "class": 2, "rating": "E", "cost": 1978, "mass": 2.5, "power": 0.9, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.3, "optmul": 0.8, "maxmul": 0.3 },
{ "id": "3u", "grp": "sg", "class": 2, "rating": "D", "cost": 5934, "mass": 1, "power": 1.2, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.4, "optmul": 0.9, "maxmul": 0.4 },
{ "id": "3t", "grp": "sg", "class": 2, "rating": "C", "cost": 17803, "mass": 2.5, "power": 1.5, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.5, "optmul": 1, "maxmul": 0.5 },
{ "id": "3s", "grp": "sg", "class": 2, "rating": "B", "cost": 53408, "mass": 4, "power": 1.8, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.6, "optmul": 1.1, "maxmul": 0.6 },
{ "id": "3r", "grp": "sg", "class": 2, "rating": "A", "cost": 160224, "mass": 2.5, "power": 2.1, "minmass": 28, "optmass": 55, "maxmass": 138, "minmul": 1.7, "optmul": 1.2, "maxmul": 0.7 }
]
}

View File

@@ -1,69 +0,0 @@
{
"adder": {
"properties": {
"name": "Adder",
"manufacturer": "Zorgon Peterson",
"class": 1,
"hullCost": 39993,
"speed": 220,
"boost": 320,
"boostEnergy": 9,
"agility": 8,
"baseShieldStrength": 60,
"baseArmour": 162,
"hullMass": 35,
"masslock": 7
},
"retailCost": 87808,
"slots": {
"common": [
3,
3,
3,
1,
2,
3,
3
],
"hardpoints": [
2,
1,
1,
0,
0
],
"internal": [
3,
3,
2,
2,
1
]
},
"defaults": {
"common": [
"3E",
"3E",
"3E",
"1E",
"2E",
"3E",
"3C"
],
"hardpoints": [
0,
17,
17,
0,
0
],
"internal": [
"01",
"44",
"00",
0,
"2h"
]
}
}
}

View File

@@ -1,103 +0,0 @@
{
"anaconda": {
"properties": {
"name": "Anaconda",
"manufacturer": "Faulcon DeLacy",
"class": 3,
"hullCost": 141889932,
"speed": 180,
"boost": 240,
"boostEnergy": 29,
"agility": 2,
"baseShieldStrength": 350,
"baseArmour": 945,
"hullMass": 400,
"masslock": 23
},
"retailCost": 146969451,
"slots": {
"common": [
8,
7,
6,
5,
8,
8,
5
],
"hardpoints": [
4,
3,
3,
3,
2,
2,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
7,
6,
6,
6,
5,
5,
5,
4,
4,
4,
2
]
},
"defaults": {
"common": [
"8E",
"7E",
"6E",
"5E",
"8E",
"8E",
"5C"
],
"hardpoints": [
0,
0,
0,
0,
0,
0,
17,
17,
0,
0,
0,
0,
0,
0,
0,
0
],
"internal": [
"05",
"04",
"4j",
0,
"03",
0,
0,
0,
0,
"2h",
"00"
]
}
}
}

View File

@@ -1,83 +0,0 @@
{
"asp": {
"properties": {
"name": "Asp Explorer",
"manufacturer": "Lakon",
"class": 2,
"hullCost": 6135658,
"speed": 250,
"boost": 340,
"boostEnergy": 14,
"agility": 6,
"baseShieldStrength": 140,
"baseArmour": 378,
"hullMass": 280,
"masslock": 11
},
"retailCost": 6661153,
"slots": {
"common": [
5,
5,
5,
4,
4,
5,
5
],
"hardpoints": [
2,
2,
1,
1,
1,
1,
0,
0,
0,
0
],
"internal": [
6,
5,
3,
3,
3,
2,
2
]
},
"defaults": {
"common": [
"5E",
"5E",
"5E",
"4E",
"4E",
"5E",
"5C"
],
"hardpoints": [
0,
0,
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"04",
"4e",
"01",
0,
0,
"00",
"2h"
]
}
}
}

View File

@@ -1,73 +0,0 @@
{
"cobra_mk_iii": {
"properties": {
"name": "Cobra Mk III",
"manufacturer": "Faulcon DeLacy",
"class": 1,
"hullCost": 235787,
"speed": 280,
"boost": 400,
"boostEnergy": 11,
"agility": 6,
"baseShieldStrength": 80,
"baseArmour": 216,
"hullMass": 180,
"masslock": 8
},
"retailCost": 379718,
"slots": {
"common": [
4,
4,
4,
3,
3,
3,
4
],
"hardpoints": [
2,
2,
1,
1,
0,
0
],
"internal": [
4,
4,
4,
2,
2,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"4E",
"3E",
"3E",
"3E",
"4C"
],
"hardpoints": [
17,
17,
0,
0,
0,
0
],
"internal": [
"02",
"02",
"49",
"00",
0,
"2h"
]
}
}
}

View File

@@ -1,74 +0,0 @@
{
"diamondback": {
"properties": {
"name": "Diamondback Scout",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 461341,
"speed": 283,
"boost": 384,
"boostEnergy": 11,
"agility": 8,
"baseShieldStrength": 118,
"baseArmour": 216,
"hullMass": 170,
"masslock": 8
},
"retailCost": 564329,
"minMassFilter": 180.5,
"slots": {
"common": [
4,
4,
4,
2,
3,
2,
4
],
"hardpoints": [
2,
2,
1,
1,
0,
0,
0,
0
],
"internal": [
3,
3,
3,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"4E",
"2E",
"3E",
"2E",
"4C"
],
"hardpoints": [
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"44",
0,
0,
"2h"
]
}
}
}

View File

@@ -1,73 +0,0 @@
{
"diamondback_explorer": {
"properties": {
"name": "Diamondback Explorer",
"manufacturer": "Lakon",
"class": 1,
"hullCost": 1635691,
"speed": 242,
"boost": 316,
"boostEnergy": 14,
"agility": 5,
"baseShieldStrength": 146,
"baseArmour": 270,
"hullMass": 298,
"masslock": 10
},
"retailCost": 1894760,
"slots": {
"common": [
4,
4,
5,
3,
4,
3,
5
],
"hardpoints": [
3,
2,
2,
0,
0,
0,
0
],
"internal": [
4,
4,
3,
3,
2
]
},
"defaults": {
"common": [
"4E",
"4E",
"5E",
"3E",
"4E",
"3E",
"5C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"49",
"02",
"01",
0,
"2h"
]
}
}
}

View File

@@ -1,63 +0,0 @@
{
"eagle": {
"properties": {
"name": "Eagle",
"manufacturer": "Core Dynamics",
"class": 1,
"hullCost": 10446,
"speed": 240,
"boost": 350,
"boostEnergy": 9,
"agility": 10,
"baseShieldStrength": 60,
"baseArmour": 72,
"hullMass": 50,
"masslock": 6
},
"retailCost": 44800,
"slots": {
"common": [
2,
3,
3,
1,
2,
2,
2
],
"hardpoints": [
1,
1,
1,
0
],
"internal": [
3,
2,
1
]
},
"defaults": {
"common": [
"2E",
"3E",
"3E",
"1E",
"2E",
"2E",
"2C"
],
"hardpoints": [
17,
17,
0,
0
],
"internal": [
"44",
"00",
"2h"
]
}
}
}

View File

@@ -1,77 +0,0 @@
{
"federal_assault_ship": {
"properties": {
"name": "Federal Assault Ship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 19071993,
"speed": 216,
"boost": 361,
"boostEnergy": 21,
"agility": 6,
"baseShieldStrength": 180,
"baseArmour": 540,
"hullMass": 480,
"masslock": 14
},
"retailCost": 19814205,
"slots": {
"common": [
6,
6,
5,
5,
6,
4,
4
],
"hardpoints": [
3,
3,
2,
2,
0,
0,
0,
0
],
"internal": [
5,
5,
4,
3,
2,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"6E",
"4E",
"4C"
],
"hardpoints": [
0,
0,
17,
17,
0,
0,
0,
0
],
"internal": [
"4e",
"03",
"02",
"02",
0,
0
]
}
}
}

View File

@@ -1,81 +0,0 @@
{
"federal_dropship": {
"properties": {
"name": "Federal Dropship",
"manufacturer": "Core Dynamics",
"class": 2,
"hullCost": 18969990,
"speed": 180,
"boost": 300,
"boostEnergy": 21,
"agility": 2,
"baseShieldStrength": 200,
"baseArmour": 540,
"hullMass": 580,
"masslock": 14
},
"retailCost": 19814205,
"slots": {
"common": [
6,
6,
5,
5,
6,
4,
4
],
"hardpoints": [
3,
2,
2,
2,
2,
0,
0,
0,
0
],
"internal": [
6,
5,
5,
4,
3,
3,
2
]
},
"defaults": {
"common": [
"6E",
"6E",
"5E",
"5E",
"6E",
"4E",
"4C"
],
"hardpoints": [
0,
17,
17,
0,
0,
0,
0,
0,
0
],
"internal": [
"04",
"03",
"4e",
"02",
0,
0,
"2h"
]
}
}
}

Some files were not shown because too many files have changed in this diff Show More