mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-09 22:55:35 +00:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97f3bece33 | ||
|
|
be02444487 | ||
|
|
fc012fe68a | ||
|
|
7ac16d6d22 | ||
|
|
d82128690b | ||
|
|
9e57eb4262 | ||
|
|
6e0d45f419 | ||
|
|
645e86714e | ||
|
|
00afd1cd6a | ||
|
|
77ae126a51 | ||
|
|
9c82c7caed | ||
|
|
d9a92e7a78 | ||
|
|
d8a87029a6 | ||
|
|
f407d0f92a | ||
|
|
4ac42e62e6 | ||
|
|
748c63fa0b | ||
|
|
78ca756cef | ||
|
|
a8554b51c2 | ||
|
|
e54e4da289 | ||
|
|
f97cb5f5a7 | ||
|
|
318e8077d0 | ||
|
|
c8355a532d | ||
|
|
3686ccd4ed | ||
|
|
f02db0120a | ||
|
|
d9ad93d3cd | ||
|
|
77018cc1ad | ||
|
|
30a8a29ce3 | ||
|
|
7b1aa646ac | ||
|
|
49e4409862 | ||
|
|
ab87ddc649 | ||
|
|
57784329ac | ||
|
|
1db613c56d | ||
|
|
464cd4165f | ||
|
|
420ebe4cc7 | ||
|
|
15ead440d6 | ||
|
|
ef0614a62f | ||
|
|
2fd2af3e31 | ||
|
|
f30a904a02 | ||
|
|
e00680113f | ||
|
|
93e6a29057 |
@@ -3,7 +3,7 @@ notifications:
|
||||
email: false
|
||||
sudo: false
|
||||
node_js:
|
||||
- "4.2.6"
|
||||
- "4.8.1"
|
||||
cache:
|
||||
directories:
|
||||
- node_modules
|
||||
|
||||
30
ChangeLog.md
30
ChangeLog.md
@@ -1,3 +1,33 @@
|
||||
#2.3.7
|
||||
* Fixed Travis test issues
|
||||
* Bumped NodeJS version to provide better compatability and support
|
||||
* Added updated German Translation
|
||||
* Fixed issues with Safari
|
||||
* Use coriolis-data 2.3.7
|
||||
* Fixed Orca mass-lock
|
||||
|
||||
#2.3.6
|
||||
* Update miner role to provide better defaults
|
||||
* Fix issue where torpedo special effects were not showing
|
||||
* Fix typo causing long range blueprint to not modify shot speed in some circumstances
|
||||
* Fix for Spanish translation of Chaff Launcher (thanks to DamonFstr)
|
||||
* Update for Russian translation (thanks to LeeNTien)
|
||||
* Use coriolis-data 2.3.6:
|
||||
* Add shotspeed modifier to cannon/multi-cannon/fragment cannon
|
||||
|
||||
#2.3.5
|
||||
* Ensure that hidden blueprint effects are applied when a blueprint is selected
|
||||
* Handle display when summary values show thrusters disabled but current mass keeps them enabled
|
||||
* Added updated German translations (thanks to @sweisgerber-dev)
|
||||
* Power state (enabled and priority) now follows modules when they are swapped or copied
|
||||
* Grey out modules that are powered off to provide a clearer visual indication
|
||||
* Use coriolis-data 2.3.5:
|
||||
* Fix list of available blueprints for Point Defence
|
||||
* Fix integrity values for class 6 power plants
|
||||
* Add shot speed for long range weapon
|
||||
* Fix components for dirty drive grade 3
|
||||
* Update values for Cytoscrambler
|
||||
|
||||
#2.3.4
|
||||
* Fix crash when removing the special effect from a module
|
||||
* Ensure comparisons with saved stock ships work correctly
|
||||
|
||||
@@ -169,7 +169,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/anaconda?code=A4putkFklkdzsuf52c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04---0303326b.AwRj4zNLaA%3D%3D.CwBhCYzBGW9qCTSqq5xA.H4sIAAAAAAAAA2MUe8HMwPD%2FPwMcAABTINwTEgAAAA%3D%3D&bn=Test%20My%20Ship');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/anaconda?code=A4putkFklkdzsuf52c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04---0303326b.AwRj4zNLaA%3D%3D.CwBhCYzBGW9qCTSqq5xA.H4sIAAAAAAAAA2MUe8HMwPD%2FPwMAAGvB0AkAAAA%3D&bn=Test%20My%20Ship');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -186,7 +186,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/asp?code=A0pftiFflfddsnf5------020202033c044002v62f2i.AwRj4yvI.CwRgDBldHnJA.H4sIAAAAAAAAA2P858DAwPCXEUhwHPvx%2F78YG5AltB7I%2F8%2F0TwImJboDSPJ%2F%2B%2Ff%2Fv%2FKlX%2F%2F%2Fi3AwMTBIfARK%2FGf%2BJwVSxArStVAYqOjvz%2F%2F%2FJVo5GRhE2IBc4SKQSSz%2FDGEmCa398P8%2F%2F2%2BgTf%2F%2FAwDFxwtofAAAAA%3D%3D&bn=Multi-purpose%20Asp%20Explorer');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/asp?code=A0pftiFflfddsnf5------020202033c044002v62f2i.AwRj4yvI.CwRgDBldHnJA.H4sIAAAAAAAAA2P858DAwPCXEUhwHPvx%2F78YG5AltB7I%2F8%2F0TwImJboDSPJ%2F%2B%2Ff%2Fv%2FKlX%2F%2F%2Fi3AwMTBIfARK%2FGf%2BJwVSxArStVAYqOjvz%2F%2F%2FJVo5GRhE2IBc4SKQSSz%2FDGEmCa398P8%2F%2F2%2BgTf%2F%2FA7kMAExxqlSAAAAA&bn=Multi-purpose%20Asp%20Explorer');
|
||||
});
|
||||
|
||||
it('imports a valid v4 build with modifications', function() {
|
||||
@@ -198,7 +198,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/imperial_courier?code=A0patzF5l0das8f31a1a270202000e402t0101-2f.AwRj4zKA.CwRgDBldLiQ%3D.H4sIAAAAAAAAA12OP0tCYRjFj9fuVbvF1du9ekkT8s%2FkIg4NElyIBBd321yaGvwUQTS3N7UFfYygIT9EoyQUJA36ns47XJCWA%2B%2Fz%2Bz3Pe3ImBbDNKaqNPSBoGrL4ngfomKpFGiJ%2BLgHteR1IPjxJT5pF11uSeXNsJVcRfgdC92syWUuK0iMdKZqrjJ%2F0aoA71lJ5oKf38knWcCiptCPdhJIerdS00vlK0qktlqoj983UmqqHjQ33VsW8eazFmaTyULP2hQ4lX8LBme6g%2F6v0TTdbxJ2KhdEIaCw15MF%2FNB0L%2BS2hwEwyFM8KgP%2BqEpWWA3Qu9Z3z9kPWHzakt7Dt%2BAeD7ghSTgEAAA%3D%3D&bn=Multi-purpose%20Imperial%20Courier');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/imperial_courier?code=A0patzF5l0das8f31a1a270202000e402t0101-2f.AwRj4zKA.CwRgDBldLiQ%3D.H4sIAAAAAAAAA12OPUvDYBSFT1OTfkRJjUkbbC3Yj8mlODgUISAtdOlety5ODv0Vgji7O7kJ%2FgzBQX%2BEY7Gg0NKhfY%2FnHQLFDBdynufe9%2BRMCmCb06g29oCgacjiRx6gY6oWKUT8UgLaszqQfHmSnpVFN1uSeXNsJVcj%2FA2EHlZkspIUpUc6UjTXGT85qwHuSEuVc%2F16r99kDQeSSjvSbSjpyUpNK10uJJ3aYqk6smwm1lQ9bOxw71TMm8VanEqq9JW1r3Qo%2BREOLnQHvbWmb7rZIu5VLIyGQGOukPv%2F0WQk5LeEAjPOUDwtAP6bShy2HKAz0HPO%2B5KsP25I79O2I7LvD%2Bz4Il1XAQAA&bn=Multi-purpose%20Imperial%20Courier');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -240,7 +240,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/federal_corvette?code=A2putsFklndzsxf50x0x7l28281919040404040402020l06p05sf63c5ifr--v66g2f.AwRj4zNaqA%3D%3D.CwRgDBldUExuBiIlUA%3D%3D.H4sIAAAAAAAAA02SPy9DURjG3%2F65vW1v47TXVbeqqF7EQtIIBomRJswsYmISH8BgkFhqFZ9AwlALMYitkXQyEF2k4SMYJNK0dV7PK7nc5ck55%2Fm9z%2FnznpBeJqLvECQbM4hUjZnjO5hyWGfFikAGGjGiku0QuddhQCNdZmdWM9snsDmih4REOdlnNvz9DrPrJIicPdSwoZf8pAnTIpq8x7DYADS%2Bi5DERY85%2BYqpmkc6x%2FWGf6beKCR3YBIZFZCxCgrtczjuOmo4qTf94F4KYuxhz5jjEhXmUJNexFrpIUo02ALN1j9u1JMgD%2FMga1GfbMNRd9iHUwGy%2BpspZF3IBSGvMFJluS%2FuR24FJ2KlV%2Fxju6sQq4lhRsQTUVUJTgegLtS6EUjEE1HPAmUC0KdAjwKJeCKqD8zoURx72gHyDW9nvQhJGHkyUscS1x%2BAZnAlqwU%2FI%2BKJKEvextXrf93eQrR1KUlS5HWwGC61mfOn0oN3IM4OHoBzuuIHj33hS5jT8KeamIYa0sjhgH%2BLfplP4kcwD5Xl3xR1wfeHtqWzBHHX8I9SH9Je%2FgGvXxeungIAAA%3D%3D&bn=Imported%20Federal%20Corvette');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/federal_corvette?code=A2putsFklndzsxf50x0x7l28281919040404040402020l06p05sf63c5ifr--v66g2f.AwRj4zNaqA%3D%3D.CwRgDBldUExuBiIlUA%3D%3D.H4sIAAAAAAAAA12STy8DURTFb1szU53Ga8dg2qqqDmJDIoKFxJImumYjVrVqfAALC4lNbcUnkLCoDbEQu0bSlQVhI8JHsJBIQ73rXMkwMYuT9%2Bb87nl%2F7ovoRSL6ikD6TYNINZg5XsWUo7pfrBikr2USlRyXyDuLAhr6ZHanNLOzD5tjOiskysk5dOBvfTB7bjeRW0MNG3ohSBq1bKKxKwyLLUAjmwjpPu4wJx4xVbNI57heDfbUKUAy2xaRUQZpllHoHMHxKqjhhF4LgjtJiFHDmqbrEeVnUJOax7%2FSdRfRwBNotv9wo5kAuZMD2egKyDYcdYl1OBki6z%2BZQjaFnBPyFCM1LefF%2BcgrY0es9FKwbW8ZYj9gmBbxRVRdglMh6BNqnwsk4ouoO4HSIehNoBuBRHwR1QOmsBvHmk6IfMbd2fdCEka%2BjNSexPWGoEkcyX6CnxbxRZQtd%2BPpym%2B31xFtn0iSFPkf%2BBkttZlzB9KDFyBuFRfAGV0Ogoff8SSsCfjjD5hGWtLIwZB%2FgX5Zt%2BLHMI9My7sp6nzgZzekswTxVvCOkq%2FSXqb%2F3zfLxh6HrwIAAA%3D%3D&bn=Imported%20Federal%20Corvette');
|
||||
});
|
||||
|
||||
it('imports a valid companion API build', function() {
|
||||
@@ -252,7 +252,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/beluga?code=A0pktsFplCdpsnf70t0t2727270004040404043c4fmimlmm04mc0iv62i2f.AwRj4yukg%3D%3D%3D.CwRgDBldHi8IUA%3D%3D.H4sIAAAAAAAAA2P8Z8%2FAwPCXEUiIKTMxMPCv%2F%2Ff%2FP8cFIPGf6Z8YTEr0GjMDg%2FJWICERBOTzn%2Fn7%2F7%2FIO5Ai5n9SIEWsQEIoSxAolfbt%2F3%2BJPk4GBhE7YQYGYVmgcuVnf4Aq%2FwMAIrEcGGsAAAA%3D&bn=Imported%20Beluga%20Liner');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/beluga?code=A0pktsFplCdpsnf70t0t2727270004040404043c4fmimlmm04mc0iv62i2f.AwRj4yukg%3D%3D%3D.CwRgDBldHi8IUA%3D%3D.H4sIAAAAAAAAA2P8Z8%2FAwPCXEUiIKTMxMPCv%2F%2Ff%2FP8cFIPGf6Z8YTEr0GjMDg%2FJWICERBOTzn%2Fn7%2F7%2FIO5Ai5n9SIEWsQEIoSxAolfbt%2F3%2BJPk4GBhE7YQYGYVmgcuVnf4Aq%2FwOVAAAyiFctbgAAAA%3D%3D&bn=Imported%20Beluga%20Liner');
|
||||
});
|
||||
|
||||
it('imports a valid companion API build', function() {
|
||||
@@ -276,7 +276,7 @@ describe('Import Modal', function() {
|
||||
expect(modal.state.singleBuild).toBe(true);
|
||||
clickProceed();
|
||||
expect(MockRouter.go.mock.calls.length).toBe(1);
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('outfit/cobra_mk_iii?code=A0p0tdFaldd3sdf4------34---2f2i.AwRj4yKA.CwRgDMYExre1Rcg%3D..EweloBhBGA2EoFMCGBzANokMK6A%3D');
|
||||
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/cobra_mk_iii?code=A0p0tdFaldd3sdf4------34---2f2i.AwRj4yKA.CwRgDMYExrezBUg%3D.&bn=Imported%20Cobra%20Mk%20III');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "coriolis_shipyard",
|
||||
"version": "2.3.4",
|
||||
"version": "2.3.7",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/EDCD/coriolis"
|
||||
@@ -8,7 +8,7 @@
|
||||
"homepage": "https://coriolis.edcd.io",
|
||||
"bugs": "https://github.com/EDCD/coriolis/issues",
|
||||
"private": true,
|
||||
"engine": "node >= 4.0.0",
|
||||
"engine": "node >= 4.8.1",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"prepublish": "rollup -c && uglifyjs d3.js -c -m -o d3.min.js",
|
||||
@@ -84,7 +84,8 @@
|
||||
"style-loader": "^0.16.1",
|
||||
"url-loader": "^0.5.8",
|
||||
"webpack": "^2.4.1",
|
||||
"webpack-dev-server": "^2.4.4"
|
||||
"webpack-dev-server": "^2.4.4",
|
||||
"uglify-js": "^2.4.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-polyfill": "*",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React from 'react';
|
||||
import cn from 'classnames';
|
||||
import Slot from './Slot';
|
||||
import Persist from '../stores/Persist';
|
||||
import { DamageAbsolute, DamageKinetic, DamageThermal, DamageExplosive, MountFixed, MountGimballed, MountTurret, ListModifications, Modified } from './SvgIcons';
|
||||
@@ -32,12 +33,13 @@ export default class HardpointSlot extends Slot {
|
||||
/**
|
||||
* Generate the slot contents
|
||||
* @param {Object} m Mounted Module
|
||||
* @param {Boolean} enabled Slot enabled
|
||||
* @param {Function} translate Translate function
|
||||
* @param {Object} formats Localized Formats map
|
||||
* @param {Object} u Localized Units Map
|
||||
* @return {React.Component} Slot contents
|
||||
*/
|
||||
_getSlotDetails(m, translate, formats, u) {
|
||||
_getSlotDetails(m, enabled, translate, formats, u) {
|
||||
if (m) {
|
||||
let classRating = `${m.class}${m.rating}${m.missile ? '/' + m.missile : ''}`;
|
||||
let { drag, drop } = this.props;
|
||||
@@ -60,7 +62,8 @@ export default class HardpointSlot extends Slot {
|
||||
);
|
||||
}
|
||||
|
||||
return <div className='details' draggable='true' onDragStart={drag} onDragEnd={drop}>
|
||||
const className = cn('details', enabled ? '' : 'disabled');
|
||||
return <div className={className} draggable='true' onDragStart={drag} onDragEnd={drop}>
|
||||
<div className={'cb'}>
|
||||
<div className={'l'}>
|
||||
{m.mount && m.mount == 'F' ? <span onMouseOver={termtip.bind(null, 'fixed')} onMouseOut={tooltip.bind(null, null)}><MountFixed /></span> : ''}
|
||||
|
||||
@@ -77,6 +77,7 @@ export default class HardpointSlotSection extends SlotSection {
|
||||
dropClass={this._dropClass(h, originSlot, targetSlot)}
|
||||
ship={ship}
|
||||
m={h.m}
|
||||
enabled={h.enabled ? true : false}
|
||||
/>);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React from 'react';
|
||||
import cn from 'classnames';
|
||||
import Slot from './Slot';
|
||||
import Persist from '../stores/Persist';
|
||||
import { ListModifications, Modified } from './SvgIcons';
|
||||
@@ -14,12 +15,13 @@ export default class InternalSlot extends Slot {
|
||||
/**
|
||||
* Generate the slot contents
|
||||
* @param {Object} m Mounted Module
|
||||
* @param {Boolean} enabled Slot enabled
|
||||
* @param {Function} translate Translate function
|
||||
* @param {Object} formats Localized Formats map
|
||||
* @param {Object} u Localized Units Map
|
||||
* @return {React.Component} Slot contents
|
||||
*/
|
||||
_getSlotDetails(m, translate, formats, u) {
|
||||
_getSlotDetails(m, enabled, translate, formats, u) {
|
||||
if (m) {
|
||||
let classRating = m.class + m.rating;
|
||||
let { drag, drop, ship } = this.props;
|
||||
@@ -40,7 +42,9 @@ export default class InternalSlot extends Slot {
|
||||
}
|
||||
|
||||
let mass = m.getMass() || m.cargo || m.fuel || 0;
|
||||
return <div className='details' draggable='true' onDragStart={drag} onDragEnd={drop}>
|
||||
|
||||
const className = cn('details', enabled ? '' : 'disabled');
|
||||
return <div className={className} draggable='true' onDragStart={drag} onDragEnd={drop}>
|
||||
<div className={'cb'}>
|
||||
<div className={'l'}>{classRating} {translate(m.name || m.grp)}{m.mods && Object.keys(m.mods).length > 0 ? <span onMouseOver={termtip.bind(null, modTT)} onMouseOut={tooltip.bind(null, null)}><Modified /></span> : ''}</div>
|
||||
<div className={'r'}>{formats.round(mass)}{u.T}</div>
|
||||
|
||||
@@ -216,7 +216,6 @@ export default class InternalSlotSection extends SlotSection {
|
||||
onChange={this.props.onChange}
|
||||
onSelect={this._selectModule.bind(this, s)}
|
||||
selected={currentMenu == s}
|
||||
enabled={s.enabled}
|
||||
eligible={s.eligible}
|
||||
m={s.m}
|
||||
drag={this._drag.bind(this, s)}
|
||||
@@ -225,6 +224,7 @@ export default class InternalSlotSection extends SlotSection {
|
||||
dropClass={this._dropClass(s, originSlot, targetSlot)}
|
||||
fuel={fuelCapacity}
|
||||
ship={ship}
|
||||
enabled={s.enabled ? true : false}
|
||||
/>);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ export default class ModificationsMenu extends TranslatedComponent {
|
||||
const translate = language.translate;
|
||||
|
||||
const specials = [];
|
||||
const specialsId = m.missile ? 'specials_' + m.missile : 'specials';
|
||||
const specialsId = m.missile && Modifications.modules[m.grp]['specials_' + m.missile] ? 'specials_' + m.missile : 'specials';
|
||||
if (Modifications.modules[m.grp][specialsId] && Modifications.modules[m.grp][specialsId].length > 0) {
|
||||
const close = this._specialSelected.bind(this, null);
|
||||
specials.push(<div style={{ cursor: 'pointer' }} key={ 'none' } onClick={ close }>{translate('PHRASE_NO_SPECIAL')}</div>);
|
||||
|
||||
@@ -58,13 +58,13 @@ export default class Movement extends TranslatedComponent {
|
||||
<path d="M342 450l.4 1.5-16.2 10.7-.4-.2-3.5-13 .3-.3L342 450zm-14.3 7.6l7.7-5-9.2-.6 1.5 5.6z"/>
|
||||
|
||||
// Speed
|
||||
<text x="470" y="30" strokeWidth='0'>{formats.int(ship.calcSpeed(eng, fuel, cargo, boost))}m/s</text>
|
||||
<text x="470" y="30" strokeWidth='0'>{ship.canThrust(cargo, fuel) ? formats.int(ship.calcSpeed(eng, fuel, cargo, boost)) + 'm/s' : '-'}</text>
|
||||
// Pitch
|
||||
<text x="355" y="410" strokeWidth='0'>{formats.int(ship.calcPitch(eng, fuel, cargo, boost))}°/s</text>
|
||||
<text x="355" y="410" strokeWidth='0'>{ship.canThrust(cargo, fuel) ? formats.int(ship.calcPitch(eng, fuel, cargo, boost)) + '°/s' : '-'}</text>
|
||||
// Roll
|
||||
<text x="450" y="110" strokeWidth='0'>{formats.int(ship.calcRoll(eng, fuel, cargo, boost))}°/s</text>
|
||||
<text x="450" y="110" strokeWidth='0'>{ship.canThrust(cargo, fuel) ? formats.int(ship.calcRoll(eng, fuel, cargo, boost)) + '°/s' : '-'}</text>
|
||||
// Yaw
|
||||
<text x="160" y="430" strokeWidth='0'>{formats.int(ship.calcYaw(eng, fuel, cargo, boost))}°/s</text>
|
||||
<text x="160" y="430" strokeWidth='0'>{ship.canThrust(cargo, fuel) ? formats.int(ship.calcYaw(eng, fuel, cargo, boost)) + '°/s' : '-'}</text>
|
||||
</svg>
|
||||
</span>);
|
||||
}
|
||||
|
||||
@@ -23,11 +23,11 @@ export default class ShipPicker extends TranslatedComponent {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param {Object} props React Component properties
|
||||
* @param {Object} context React Component context
|
||||
* constructor
|
||||
* @param {object} props Properties react
|
||||
* @param {object} context react context
|
||||
*/
|
||||
constructor(props, context) {
|
||||
constructor(props, context) { // eslint-disable-line
|
||||
super(props);
|
||||
|
||||
this.shipOrder = Object.keys(Ships).sort();
|
||||
|
||||
@@ -34,9 +34,9 @@ export default class ShipSummaryTable extends TranslatedComponent {
|
||||
const sgClassNames = cn({ warning: shieldGenerator && !ship.shield, muted: !shieldGenerator });
|
||||
const sgTooltip = shieldGenerator ? 'TT_SUMMARY_SHIELDS' : 'TT_SUMMARY_SHIELDS_NONFUNCTIONAL';
|
||||
const timeToDrain = Calc.timeToDrainWep(ship, 4);
|
||||
const canThrust = ship.canThrust(cargo, fuel);
|
||||
const canThrust = ship.canThrust(cargo, ship.fuelCapacity);
|
||||
const speedTooltip = canThrust ? 'TT_SUMMARY_SPEED' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
||||
const canBoost = ship.canBoost(cargo, fuel);
|
||||
const canBoost = ship.canBoost(cargo, ship.fuelCapacity);
|
||||
const boostTooltip = canBoost ? 'TT_SUMMARY_BOOST' : canThrust ? 'TT_SUMMARY_BOOST_NONFUNCTIONAL' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
||||
|
||||
return <div id='summary'>
|
||||
|
||||
@@ -20,6 +20,7 @@ export default class Slot extends TranslatedComponent {
|
||||
maxClass: PropTypes.number.isRequired,
|
||||
selected: PropTypes.bool,
|
||||
m: PropTypes.object,
|
||||
enabled: PropTypes.bool.isRequired,
|
||||
ship: PropTypes.object.isRequired,
|
||||
eligible: PropTypes.object,
|
||||
warning: PropTypes.func,
|
||||
@@ -79,7 +80,7 @@ export default class Slot extends TranslatedComponent {
|
||||
render() {
|
||||
let language = this.context.language;
|
||||
let translate = language.translate;
|
||||
let { ship, m, dropClass, dragOver, onOpen, onChange, selected, eligible, onSelect, warning, availableModules } = this.props;
|
||||
let { ship, m, enabled, dropClass, dragOver, onOpen, onChange, selected, eligible, onSelect, warning, availableModules } = this.props;
|
||||
let slotDetails, modificationsMarker, menu;
|
||||
|
||||
if (!selected) {
|
||||
@@ -88,7 +89,7 @@ export default class Slot extends TranslatedComponent {
|
||||
}
|
||||
|
||||
if (m) {
|
||||
slotDetails = this._getSlotDetails(m, translate, language.formats, language.units); // Must be implemented by sub classes
|
||||
slotDetails = this._getSlotDetails(m, enabled, translate, language.formats, language.units); // Must be implemented by sub classes
|
||||
modificationsMarker = JSON.stringify(m);
|
||||
} else {
|
||||
slotDetails = <div className={'empty'}>{translate(eligible ? 'emptyrestricted' : 'empty')}</div>;
|
||||
|
||||
@@ -15,6 +15,8 @@ export default class SlotSection extends TranslatedComponent {
|
||||
static propTypes = {
|
||||
ship: PropTypes.object.isRequired,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
onCargoChange: PropTypes.func.isRequired,
|
||||
onFuelChange: PropTypes.func.isRequired,
|
||||
code: PropTypes.string.isRequired,
|
||||
togglePwr: PropTypes.func
|
||||
};
|
||||
@@ -129,26 +131,48 @@ export default class SlotSection extends TranslatedComponent {
|
||||
let { originSlot, targetSlot, copy } = this.state;
|
||||
let m = originSlot.m;
|
||||
|
||||
if (targetSlot && originSlot != targetSlot) {
|
||||
if (copy) {
|
||||
// We want to copy the module in to the target slot
|
||||
if (targetSlot && canMount(this.props.ship, targetSlot, m.grp, m.class)) {
|
||||
const mCopy = m.clone();
|
||||
this.props.ship.use(targetSlot, mCopy, false);
|
||||
// Copy power info
|
||||
targetSlot.enabled = originSlot.enabled;
|
||||
targetSlot.priority = originSlot.priority;
|
||||
this.props.onChange();
|
||||
}
|
||||
} else {
|
||||
// Store power info
|
||||
const originEnabled = targetSlot.enabled;
|
||||
const originPriority = targetSlot.priority;
|
||||
const targetEnabled = originSlot.enabled;
|
||||
const targetPriority = originSlot.priority;
|
||||
// We want to move the module in to the target slot, and swap back any module that was originally in the target slot
|
||||
if (targetSlot && m && canMount(this.props.ship, targetSlot, m.grp, m.class)) {
|
||||
// Swap modules if possible
|
||||
if (targetSlot.m && canMount(this.props.ship, originSlot, targetSlot.m.grp, targetSlot.m.class)) {
|
||||
this.props.ship.use(originSlot, targetSlot.m, true);
|
||||
this.props.ship.use(targetSlot, m);
|
||||
// Swap power
|
||||
originSlot.enabled = originEnabled;
|
||||
originSlot.priority = originPriority;
|
||||
targetSlot.enabled = targetEnabled;
|
||||
targetSlot.priority = targetPriority;
|
||||
} else { // Otherwise empty the origin slot
|
||||
// Store power
|
||||
const targetEnabled = originSlot.enabled;
|
||||
this.props.ship.use(originSlot, null, true); // Empty but prevent summary update
|
||||
this.props.ship.use(targetSlot, m);
|
||||
originSlot.enabled = 0;
|
||||
originSlot.priority = 0;
|
||||
targetSlot.enabled = targetEnabled;
|
||||
targetSlot.priority = targetPriority;
|
||||
}
|
||||
this.props.ship.use(targetSlot, m); // update target slot
|
||||
this.props.onChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
this.setState({ originSlot: null, targetSlot: null, copy: null });
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ export default class StandardSlot extends TranslatedComponent {
|
||||
|
||||
return (
|
||||
<div className={cn('slot', { selected: this.props.selected })} onClick={this.props.onOpen} onContextMenu={stopCtxPropagation}>
|
||||
<div className={cn('details-container', { warning: warning && warning(slot.m) })}>
|
||||
<div className={cn('details-container', { warning: warning && warning(slot.m), disabled: m.grp !== 'bh' && !slot.enabled })}>
|
||||
<div className={'sz'}>{slot.maxClass}</div>
|
||||
<div>
|
||||
<div className={'l'}>{classRating} {translate(m.name || m.grp)}{m.mods && Object.keys(m.mods).length > 0 ? <span className='r' onMouseOver={termtip.bind(null, modTT)} onMouseOut={tooltip.bind(null, null)}><Modified /></span> : null }</div>
|
||||
|
||||
@@ -28,6 +28,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_optimizeStandard() {
|
||||
this.props.ship.useLightestStandard();
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
@@ -39,6 +41,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_multiPurpose(shielded, bulkheadIndex) {
|
||||
ShipRoles.multiPurpose(this.props.ship, shielded, bulkheadIndex);
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
@@ -49,6 +53,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_optimizeCargo(shielded) {
|
||||
ShipRoles.trader(this.props.ship, shielded);
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
@@ -59,6 +65,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_optimizeMiner(shielded) {
|
||||
ShipRoles.miner(this.props.ship, shielded);
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
@@ -69,6 +77,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_optimizeExplorer(planetary) {
|
||||
ShipRoles.explorer(this.props.ship, planetary);
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
@@ -78,6 +88,8 @@ export default class StandardSlotSection extends SlotSection {
|
||||
_optimizeRacer() {
|
||||
ShipRoles.racer(this.props.ship);
|
||||
this.props.onChange();
|
||||
this.props.onCargoChange(this.props.ship.cargoCapacity);
|
||||
this.props.onFuelChange(this.props.ship.fuelCapacity);
|
||||
this._close();
|
||||
}
|
||||
|
||||
|
||||
@@ -74,9 +74,9 @@ export default class UtilitySlotSection extends SlotSection {
|
||||
dragOver={this._dragOverSlot.bind(this, h)}
|
||||
drop={this._drop}
|
||||
dropClass={this._dropClass(h, originSlot, targetSlot)}
|
||||
enabled={h.enabled}
|
||||
ship={ship}
|
||||
m={h.m}
|
||||
enabled={h.enabled ? true : false}
|
||||
/>);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,153 +14,606 @@ export const formats = {
|
||||
};
|
||||
|
||||
export const terms = {
|
||||
// Phrases
|
||||
PHRASE_BACKUP_DESC: 'Export aller Coriolis-Daten, um sie zu sichern oder um sie zu einem anderen Browser/Gerät zu übertragen.', // Backup of all Coriolis data to save or transfer to another browser/device
|
||||
PHRASE_CONFIRMATION: 'Sind Sie sicher?', // Are You Sure?
|
||||
PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools', // A detailed JSON export of your build for use in other sites and tools
|
||||
PHRASE_FASTEST_RANGE: 'aufeinanderfolgende maximale Reichweite/Sprünge', // Consecutive max range jumps
|
||||
PHRASE_IMPORT: 'JSON hier einfügen oder importieren', // Paste JSON or import here
|
||||
PHRASE_LADEN: 'Schiffsmasse + Treibstoff + Fracht', // Ship Mass + Fuel + Cargo
|
||||
PHRASE_NO_BUILDS: 'Keine Konfigurationen zum Vergleich ausgewählt!', // No builds added to comparison!
|
||||
PHRASE_NO_RETROCH: 'Keine Umrüständerungen', // No Retrofitting changes
|
||||
PHRASE_SELECT_BUILDS: 'Ausstattung zum Vergleich auswählen', // Select Builds to Compare
|
||||
PHRASE_SG_RECHARGE: 'Zeit von 50% bis 100% der Ladung', // Time from 50% to 100% Charge
|
||||
PHRASE_SG_RECOVER: 'Erneuerung (zu 50%) nach Zusammenbruch', // Recovery (to 50%) after collapse
|
||||
PHRASE_UNLADEN: 'Schiffsmasse ohne Treibstoff und Fracht', // Ship Mass excluding Fuel and Cargo
|
||||
PHRASE_UPDATE_RDY: 'Update verfügbar! Klicken zum Aktualisieren', // Update Available! Click to Refresh
|
||||
PHRASE_ALT_ALL: 'Alt + Klick um alle Plätze zu füllen',
|
||||
PHRASE_BACKUP_DESC: 'Export aller Coriolis-Daten, um sie zu sichern oder um sie zu einem anderen Browser/Gerät zu übertragen.',
|
||||
PHRASE_CONFIRMATION: 'Sind Sie sicher?',
|
||||
PHRASE_EXPORT_DESC: 'Ein detaillierter JSON-Export Ihrer Konfiguration für die Verwendung in anderen Websites und Tools',
|
||||
PHRASE_FASTEST_RANGE: 'aufeinanderfolgende maximale Reichweite/Sprünge',
|
||||
PHRASE_IMPORT: 'JSON hier einfügen oder importieren',
|
||||
PHRASE_LADEN: 'Schiffsmasse + Treibstoff + Fracht',
|
||||
PHRASE_NO_BUILDS: 'Keine Konfigurationen zum Vergleich ausgewählt!',
|
||||
PHRASE_NO_RETROCH: 'Keine Umrüständerungen',
|
||||
PHRASE_SELECT_BUILDS: 'Ausstattung zum Vergleich auswählen',
|
||||
PHRASE_SG_RECHARGE: 'Zeit von 50% bis 100% der Ladung bei vollem SYS Kondensator',
|
||||
PHRASE_SG_RECOVER: 'Erneuerung (zu 50%) nach Zusammenbruch bei vollem SYS Kondensator',
|
||||
PHRASE_UNLADEN: 'Schiffsmasse ohne Treibstoff und Fracht',
|
||||
PHRASE_UPDATE_RDY: 'Update verfügbar! Klicken zum Aktualisieren',
|
||||
PHRASE_ENGAGEMENT_RANGE: 'Die Distanz zwischen deinem Schiff und seinem Ziel',
|
||||
PHRASE_SELECT_BLUEPRINT: 'Klicken um eine Bauplan auszuwählen',
|
||||
PHRASE_BLUEPRINT_WORST: 'Schlechteste Primärwerte für diesen Bauplan',
|
||||
PHRASE_BLUEPRINT_RANDOM: 'Zufällige Auswahl an Primärwerten für diesen Bauplan (Schlechteste <> Beste)',
|
||||
PHRASE_BLUEPRINT_BEST: 'Beste Primärwerte für diesen Bauplan',
|
||||
PHRASE_BLUEPRINT_EXTREME: 'Beste Positive Werte und schlechteste Negative Werte für diesen Bauplan',
|
||||
PHRASE_BLUEPRINT_RESET: 'Entferne alle Modifikationen und experimentelle Effekte',
|
||||
PHRASE_SELECT_SPECIAL: 'Klicken um einen experimentellen Effekt auszuwählen',
|
||||
PHRASE_NO_SPECIAL: 'Keine Experimentellen Effekte',
|
||||
PHRASE_SHOPPING_LIST: 'Stationen die diese Schiffskonfiguration verkaufen',
|
||||
PHRASE_REFIT_SHOPPING_LIST: 'Stationen die die benötigten Module verkaufen',
|
||||
PHRASE_TOTAL_EFFECTIVE_SHIELD: 'Gesamtschaden der von jeder Schadensart absorbiert werden kann (Bei Nutzung aller Schildzellen)',
|
||||
PHRASE_TIME_TO_LOSE_SHIELDS: 'Schilde werden halten für',
|
||||
PHRASE_TIME_TO_RECOVER_SHIELDS: 'Schilde werden sich erholen in',
|
||||
PHRASE_TIME_TO_RECHARGE_SHIELDS: 'Schilde werden sich wieder aufgeladen haben in',
|
||||
PHRASE_SHIELD_SOURCES: 'Aufschlüsselung der Schildenergiezusammensetzung',
|
||||
PHRASE_EFFECTIVE_SHIELD: 'Effektive Schildstärke gegen die Unterschiedlichen Schadensarten',
|
||||
PHRASE_ARMOUR_SOURCES: 'Aufschlüsselung der Hüllenpanzerungszusammensetzung',
|
||||
PHRASE_EFFECTIVE_ARMOUR: 'Effektive Hüllenpanzerungsstärke gegen die unterschiedlichen Schadensarten',
|
||||
PHRASE_DAMAGE_TAKEN: '% des rohen Schadens der unterschiedlichen Schadensarten',
|
||||
PHRASE_TIME_TO_LOSE_ARMOUR: 'Hüllenpanzerung wird halten für',
|
||||
PHRASE_MODULE_PROTECTION_EXTERNAL: 'Modulpanzerung der Waffenaufhängung',
|
||||
PHRASE_MODULE_PROTECTION_INTERNAL: 'Modulpanzerung für alle anderen Module',
|
||||
PHRASE_SHIELD_DAMAGE: 'Aufschlüsselung des kontinuierlichen SPS gegen Schilde',
|
||||
PHRASE_ARMOUR_DAMAGE: 'Aufschlüsselung des kontinuierlichen SPS gegen Hüllenpanzerung',
|
||||
|
||||
// Units / Metrics
|
||||
LY: 'Lj', // Light Years
|
||||
T: 't', // Tons (Metric Ton - 1000kg)
|
||||
PHRASE_TIME_TO_REMOVE_SHIELDS: 'Schilde werden zusammenbrechen in',
|
||||
TT_TIME_TO_REMOVE_SHIELDS: 'Mit andauerndem Beschuss durch alle Waffen',
|
||||
PHRASE_TIME_TO_REMOVE_ARMOUR: 'Hüllenpanzerung wird brechen in',
|
||||
TT_TIME_TO_REMOVE_ARMOUR: 'Mit andauerndem Beschuss durch alle Waffen',
|
||||
PHRASE_TIME_TO_DRAIN_WEP: 'Leert WAF Energie in',
|
||||
TT_TIME_TO_DRAIN_WEP: 'Dauer um WAF Energie aufzubrauchen wenn alle Waffen gefeuert werden',
|
||||
TT_TIME_TO_LOSE_SHIELDS: 'Gegen andauernden Beschuss durch alle Waffen des Gegners',
|
||||
TT_TIME_TO_LOSE_ARMOUR: 'Gegen andauernden Beschuss durch alle Waffen des Gegners',
|
||||
TT_MODULE_ARMOUR: 'ModulPanzerung für den Schutz interner Subsysteme (Module)',
|
||||
TT_MODULE_PROTECTION_EXTERNAL: 'Prozensatz des Schadens der von den Waffenaufhängungen zu den Modulverstärkungen umgeleitet wird',
|
||||
TT_MODULE_PROTECTION_INTERNAL: 'Prozensatz des Schadens der von den Subsystem (außer Waffen) zu den Modulverstärkungen umgeleitet wird',
|
||||
|
||||
// Sizes
|
||||
S: 'K', // Small Hardpoint (single Character)
|
||||
L: 'G', // Large Hardpoint size (single character)
|
||||
H: 'R', // Huge Hardpoint size (single character)
|
||||
U: 'W', // Utility Hardpoint size (single character) - Kill warrant scanner, etc
|
||||
small: 'klein', // Small ship size
|
||||
medium: 'mittel', // Medium ship size
|
||||
large: 'groß', // Large Ship Size
|
||||
TT_EFFECTIVE_SDPS_SHIELDS: 'Effektiver SPS solange die Waffenenergie nicht aufgebraucht wurde',
|
||||
TT_EFFECTIVENESS_SHIELDS: 'Effektivität im Vergleich zu einem Ziel ohne Widerstände mit 0 PIPS in SYS bei 0m',
|
||||
TT_EFFECTIVE_SDPS_ARMOUR: 'Effektiver kontinuierlicher Schaden solange der WAF Kondensator nicht aufgebraucht wurde',
|
||||
TT_EFFECTIVENESS_ARMOUR: 'Effektivität im Vergleich zu einem Ziel ohne Widerstände bei 0m',
|
||||
|
||||
// Terms
|
||||
about: 'über', // Link to about page / about Coriolis.io
|
||||
action: 'Aktion',
|
||||
added: 'hinzugefügt',
|
||||
ammo: 'Munition', // Ammunition
|
||||
armour: 'Panzerung',
|
||||
available: 'verfügbar', // Available options
|
||||
backup: 'Sicherungsdatei',
|
||||
base: 'Basis', // Base speed, boost, etc - Base ship stats
|
||||
bays: 'Lagerraum',
|
||||
bins: 'Behälter', // Number of Mining Refinery bins
|
||||
build: 'Ausstattung', // Shorthand for the build/configuration/design name
|
||||
'build name': 'Ausstattungsname', // Ship build/configuration/design name
|
||||
builds: 'Ausstattungen', // Ship build/configuration/design names
|
||||
buy: 'kaufen',
|
||||
cancel: 'abbrechen',
|
||||
cargo: 'Fracht',
|
||||
cells: 'Zellen', // Number of cells in a shield cell bank
|
||||
close: 'schließen',
|
||||
compare: 'vergleichen',
|
||||
'compare all': 'alles vergleichen',
|
||||
comparison: 'Vergleich',
|
||||
comparisons: 'Vergleiche',
|
||||
cost: 'Preis', // Cost / price of a module or price of a ship
|
||||
costs: 'Kosten', // Costs / prices of a modules or prices of ships
|
||||
create: 'erstellen',
|
||||
'create new': 'neu erstellen',
|
||||
credits: 'Credits',
|
||||
PHRASE_EFFECTIVE_SDPS_SHIELDS: 'Effektiver kontinuierlicher SPS gegen Schilde',
|
||||
PHRASE_EFFECTIVE_SDPS_ARMOUR: 'Effektiver kontinuierlicher SPS gegen Hüllenpanzerung',
|
||||
|
||||
TT_SUMMARY_SPEED: 'Mit vollem Tank und 4 PIPS in WAF',
|
||||
TT_SUMMARY_SPEED_NONFUNCTIONAL: 'Schubdüsen deaktiviert oder maximale Masse überschritten',
|
||||
TT_SUMMARY_BOOST: 'Mit vollem Tank und 4 PIPS in ANT',
|
||||
TT_SUMMARY_BOOST_NONFUNCTIONAL: 'Energieverteiler kann nicht genügend Energie für den Boost liefern',
|
||||
TT_SUMMARY_SHIELDS: 'Rohe Schildstärke, inklusive Schildverstärker',
|
||||
TT_SUMMARY_SHIELDS_NONFUNCTIONAL: 'Keine Schildgenerator oder Schilde deaktiviert',
|
||||
TT_SUMMARY_INTEGRITY: 'Schiffsintegrität, einschließlich Hüllenpanzerung und Rumpfhüllenverstärkung',
|
||||
TT_SUMMARY_HULL_MASS: 'Hüllenmasse, bevor jegliche Module installiert wurde',
|
||||
TT_SUMMARY_UNLADEN_MASS: 'Hüllenmasse ohne Ladung und Treibstoff',
|
||||
TT_SUMMARY_LADEN_MASS: 'Hüllenmasse, einschließlich Treibstoff und Ladung',
|
||||
TT_SUMMARY_DPS: 'Schaden pro Sekunde wenn alle Waffen feuern',
|
||||
TT_SUMMARY_EPS: 'WAF Kondensator Verbrauch pro Sekunde wenn alle Waffen feuern',
|
||||
TT_SUMMARY_TTD: 'Zeit um den WAF Kondensator aufzubrauchen wenn alle Waffen feuern und 4 PIPS auf dem WAF Kondesator',
|
||||
TT_SUMMARY_MAX_SINGLE_JUMP: 'Weitest mögliche Sprungreichweite ohne Ladung und nur genügend Treibstoff für den Sprung selbst',
|
||||
TT_SUMMARY_UNLADEN_SINGLE_JUMP: 'Weitest mögliche Sprungreichweite ohne Ladung und einem vollen Tank',
|
||||
TT_SUMMARY_LADEN_SINGLE_JUMP: 'Weitest mögliche Sprungreichweite mit voller Ladung und einem vollen Tank',
|
||||
TT_SUMMARY_UNLADEN_TOTAL_JUMP: 'Weitest mögliche Sprungreichweite ohne Ladung, einem vollen Tank und der weitest möglichen Sprungreichweite bei jedem Sprung',
|
||||
TT_SUMMARY_LADEN_TOTAL_JUMP: 'Weitest mögliche Sprungreichweite mit maximaler Ladung, einem vollen Tank und der weitest möglichen Sprungreichweite bei jedem Sprung',
|
||||
|
||||
HELP_MODIFICATIONS_MENU: 'Klicke auf eine Zahl um einen neuen Wert einzutragen oder bewege den Regler',
|
||||
|
||||
// Other languages fallback to these values
|
||||
// Only Translate to other languages if the name is different in-game
|
||||
am: 'Automatische Feldwartung',
|
||||
bh: 'Hüllenpanzerung',
|
||||
bl: 'Strahlenlaser',
|
||||
bsg: 'Bizellengenerator',
|
||||
c: 'Kanone',
|
||||
cc: 'Sammeldrohnensteuerung',
|
||||
ch: 'Düppelwerfer',
|
||||
cr: 'Laderaum',
|
||||
cs: 'Ladungssensor',
|
||||
dc: 'Landecomputer',
|
||||
ec: 'Elektronische Gegenmaßnahme',
|
||||
fc: ' Fragmentkanone',
|
||||
fh: 'Jägerhangar',
|
||||
fi: 'Frameshift Unterbrecher',
|
||||
fs: 'Treibstoffsammler',
|
||||
fsd: 'Frameshiftantrieb',
|
||||
ft: 'Treibstofftank',
|
||||
fx: 'Treibstoffdrohnencontroller',
|
||||
hb: 'Ladelukenbrecherdrohnencontroller',
|
||||
hr: 'Rumpfhüllenverstärkung',
|
||||
hs: 'Kühlkörperwerfer',
|
||||
kw: 'Tötungsbefehlscanner',
|
||||
ls: 'Lebenserhaltung',
|
||||
mc: 'Mehrzweckgeschütz ',
|
||||
ml: 'Erzabbaulaser',
|
||||
mr: 'Raketengestell',
|
||||
mrp: 'Modulverstärkung',
|
||||
nl: 'Minenwerfer',
|
||||
pa: 'Plasmabeschleuniger',
|
||||
pas: 'Planetare Annäherungseinheit',
|
||||
pc: 'Erzsuchersteuerung',
|
||||
pce: 'Touristen Passagierkabine',
|
||||
pci: 'Business Klasse Passagierkabine',
|
||||
pcm: 'Erste Klasse Passagierkabine',
|
||||
pcq: 'Luxus Passagierkabine',
|
||||
pd: 'Energieverteiler',
|
||||
pl: 'Pulslaser',
|
||||
po: 'Punktverteidigung',
|
||||
pp: 'Kraftwerk',
|
||||
psg: 'Prismatischer Schildgenerator',
|
||||
pv: 'Planetarer Fahrzeughangar',
|
||||
rf: 'Raffinerie',
|
||||
rg: 'Schienenkanone',
|
||||
s: 'Sensoren',
|
||||
sb: 'Schildverstärker',
|
||||
sc: 'Himmelskörperscanner',
|
||||
scb: 'Schildzellenbatterie',
|
||||
sg: 'Schildgenerator',
|
||||
ss: 'Oberflächensensor',
|
||||
t: 'Schubdüsen',
|
||||
tp: 'Torpedopylone',
|
||||
ul: 'Salvenlaser',
|
||||
ws: 'Frameshiftwolkenscanner',
|
||||
hrd: 'Hüllenhärte',
|
||||
|
||||
// Items on the outfitting page
|
||||
// Notification of restricted slot
|
||||
emptyrestricted: 'leer (eingeschränkt)',
|
||||
'damage dealt to': 'Schaden gegen',
|
||||
'damage received from': 'Schaden durch',
|
||||
'against shields': 'Gegen Schilde',
|
||||
'against hull': 'Gegen Hülle',
|
||||
'total effective shield': 'Effektiver Schild (kombiniert)',
|
||||
|
||||
// 'ammo' was overloaded for outfitting page and modul info, so changed to ammunition for outfitting page
|
||||
ammunition: 'Munition',
|
||||
|
||||
// Unit for seconds
|
||||
secs: 's',
|
||||
|
||||
rebuildsperbay: 'Jäger pro Stellpaltz',
|
||||
|
||||
// Blueprint rolls
|
||||
worst: 'Schlecht',
|
||||
average: 'Durchschnitt',
|
||||
random: 'Zufall',
|
||||
best: 'Sehr gut',
|
||||
extreme: 'Extrem',
|
||||
reset: 'Zurücksetzen',
|
||||
|
||||
// Weapon, offence, defence and movement
|
||||
dpe: 'Damage per MJ of energy',
|
||||
dps: 'Schaden pro Sekunde',
|
||||
sdps: 'Kontinuierlicher Schaden pro Sekunde',
|
||||
dpssdps: 'Schaden pro Sekunde (kontinuierlicher Schaden pro Sekunde)',
|
||||
eps: 'Energie pro Sekunde',
|
||||
epsseps: 'Energie pro Sekunde (kontinuierliche Energie pro Sekunde)',
|
||||
hps: 'Hitze pro Sekunde',
|
||||
hpsshps: 'Hitze pro Sekunde (kontinuierliche Hitze pro Sekunde)',
|
||||
'damage by': 'Schaden von',
|
||||
'damage from': 'Schaden von',
|
||||
'shield cells': 'Schildbatterien',
|
||||
'recovery': 'Erholung',
|
||||
'recharge': 'Auflaung',
|
||||
'engine pips': 'Schubpriorität',
|
||||
'4b': '4 PIPS und Boost',
|
||||
'speed': 'Tempo',
|
||||
'pitch': 'Kippen',
|
||||
'roll': 'Rollen',
|
||||
'yaw': 'Gieren',
|
||||
'internal protection': 'Interner Schutz',
|
||||
'external protection': 'Externer Schutz',
|
||||
'engagement range': 'Gefechtsreichweite',
|
||||
'total': 'Insg.',
|
||||
|
||||
// Modifications
|
||||
ammo: 'Maximale Munition',
|
||||
boot: 'Startzeit',
|
||||
brokenregen: 'Regenrationsrate (Gebrochene Schilde)',
|
||||
burst: 'Salve',
|
||||
burstrof: 'Salven Feuerrate',
|
||||
clip: 'Munnitionsmagazin',
|
||||
damage: 'Schaden',
|
||||
'damage per second': 'Schaden pro Sekunde',
|
||||
delete: 'löschen',
|
||||
'delete all': 'alles löschen',
|
||||
dep: 'ausg', // Weapons/Hardpoints Deployed abbreviation
|
||||
deployed: 'ausgefahren', // Weapons/Hardpoints Deployed
|
||||
'detailed export': 'detailierter Export',
|
||||
disabled: 'deaktiviert',
|
||||
discount: 'Rabatt',
|
||||
'edit data': 'bearbeiten',
|
||||
efficiency: 'Effizienz', // Power Plant efficiency
|
||||
empty: 'leer',
|
||||
'empty all': 'alles entfernen',
|
||||
ENG: 'ANT', // Abbreviation - Engine recharge rate for power distributor
|
||||
'Enter Name': 'Namen eingeben',
|
||||
Explorer: 'Forscher',
|
||||
export: 'Export',
|
||||
'fastest range': 'maximale Reichweite', // Fastet totaljump range - sum of succesive jumps
|
||||
forum: 'Forum',
|
||||
fuel: 'Treibstoff',
|
||||
'fuel level': 'Tankfüllstand', // Percent of fuel (T) in the tank
|
||||
'full tank': 'Tank voll',
|
||||
hardpoints: 'Waffenaufhängungen',
|
||||
hull: 'Rumpf', // Ships hull
|
||||
import: 'importieren',
|
||||
insurance: 'Versicherung',
|
||||
'internal compartments': 'Innenbereich',
|
||||
jump: 'Sprung', // Single jump range
|
||||
'jump range': 'Sprungreichweite',
|
||||
jumps: 'Sprünge',
|
||||
laden: 'beladen',
|
||||
language: 'Sprache',
|
||||
maneuverability: 'Manövrierbarkeit',
|
||||
manufacturer: 'Hersteller',
|
||||
distdraw: 'Energieverteilerverbrauch',
|
||||
duration: 'Dauer',
|
||||
eff: 'Effizienz',
|
||||
engcap: 'Antriebskapazität',
|
||||
engrate: 'Antrieb Ladungsrate',
|
||||
explres: 'Explosionswiderstand',
|
||||
facinglimit: 'Facing limit',
|
||||
hullboost: 'Hüllenboost',
|
||||
hullreinforcement: 'Hüllenverstärkung',
|
||||
integrity: 'Integrität',
|
||||
jitter: 'Schwankungsbreite',
|
||||
kinres: 'Kinetischer Widerstand',
|
||||
maxfuel: 'Maximaler Treibstoff pro Sprung',
|
||||
mass: 'Masse',
|
||||
'mass lock factor': 'Massensperrefaktor',
|
||||
'max mass': 'maximale Masse',
|
||||
MLF: 'MSF', // Mass Lock Factor Abbreviation
|
||||
module: 'Modul',
|
||||
modules: 'Module',
|
||||
'net cost': 'Nettokosten',
|
||||
no: 'Nein',
|
||||
'none created': 'nicht erstellt',
|
||||
ok: 'OK',
|
||||
'optimal mass': 'optimale Masse', // Lowest weight / best weight for jump distance, etc
|
||||
optimize: 'optimieren',
|
||||
pen: 'Durchdr.', // Armour peneration abbreviation
|
||||
permalink: 'Permanentlink',
|
||||
power: 'Energie', // Power = Energy / second. Power generated by the power plant, or power consumed (MW / Mega Watts). Used in the power plant section
|
||||
pri: 'Prio', // Priority abbreviation for power management
|
||||
proceed: 'fortfahren',
|
||||
qty: 'Menge', // Quantity abbreviation
|
||||
optmass: 'Optimale Masse',
|
||||
optmul: 'Optimalmultiplikator',
|
||||
pgen: 'Energiegewinnung',
|
||||
piercing: 'Durchdringung',
|
||||
power: 'Energieverbrauch',
|
||||
protection: 'Schutz',
|
||||
range: 'Reichweite',
|
||||
rate: 'Rate',
|
||||
recharge: 'aufladen', // Shield Recharge time from 50% -> 100%
|
||||
recovery: 'Erneuerung', // Shield recovery time (after losing shields/turning on -> 50%)
|
||||
'refuel time': 'Auftankzeit', // Time to refuel the tank when scooping
|
||||
reload: 'aktualisieren', // Reload weapon/hardpoint
|
||||
ranget: 'Reichweite/s', // Range in time (for FSD interdictor)
|
||||
regen: 'Wiederaufladungsrate',
|
||||
reload: 'Wiederaufladung',
|
||||
rof: 'Feuerrate',
|
||||
angle: 'Abtastwinkel',
|
||||
scanrate: 'Abtastrate',
|
||||
scantime: 'Abtastzeit',
|
||||
shield: 'Schild',
|
||||
shieldboost: 'Schildverstärkung',
|
||||
shieldreinforcement: 'Schildverstärkung',
|
||||
shotspeed: 'Schussgeschwidndigkeit',
|
||||
spinup: 'Aufwärmphase',
|
||||
syscap: 'Systemkapazität',
|
||||
sysrate: 'System Ladungsrate',
|
||||
thermload: 'Thermische Last',
|
||||
thermres: 'Thermischer Widerstand',
|
||||
wepcap: 'Waffenkapazität',
|
||||
weprate: 'Waffen Ladungsrate',
|
||||
|
||||
// Shield generators use a different terminology
|
||||
minmass_sg: 'Minimale Hüllenmasse',
|
||||
optmass_sg: 'Optimale Hüllenmasse',
|
||||
maxmass_sg: 'Maximum Hüllenmasse',
|
||||
minmul_sg: 'Minimale Stärke',
|
||||
optmul_sg: 'Optimale Stärke',
|
||||
maxmul_sg: 'Maximale Stärke',
|
||||
minmass_psg: 'Minimale Hüllenmasse',
|
||||
optmass_psg: 'Optimale Hüllenmasse',
|
||||
maxmass_psg: 'Maximum Hüllenmasse',
|
||||
minmul_psg: 'Minimale Stärke',
|
||||
optmul_psg: 'Optimale Stärke',
|
||||
maxmul_psg: 'Maximale Stärke',
|
||||
minmass_bsg: 'Minimale Hüllenmasse',
|
||||
optmass_bsg: 'Optimale Hüllenmasse',
|
||||
maxmass_bsg: 'Maximum Hüllenmasse',
|
||||
minmul_bsg: 'Minimale Stärke',
|
||||
optmul_bsg: 'Optimale Stärke',
|
||||
maxmul_bsg: 'Maximale Stärke',
|
||||
|
||||
range_s: 'Typische Emissionsreichweite',
|
||||
|
||||
// Damage types
|
||||
absolute: 'Insgesamt',
|
||||
explosive: 'Explosiv',
|
||||
kinetic: 'Kinetisch',
|
||||
thermal: 'Thermisch',
|
||||
|
||||
// Shield sources
|
||||
generator: 'Generator',
|
||||
boosters: 'Verstärker',
|
||||
cells: 'Batterien',
|
||||
|
||||
// Armour sources
|
||||
bulkheads: 'Hüllenpanzerung',
|
||||
reinforcement: 'Hüllenverstärkung',
|
||||
|
||||
// Optional module groups (only these, that are not in the list with the short terms)
|
||||
'hangars': 'Hangars',
|
||||
'limpet controllers': 'Drohnensteuerung',
|
||||
'passenger cabins': 'Passagierkabinen',
|
||||
'structural reinforcement': 'Strukturverstärkungen',
|
||||
|
||||
// Hardpoint module groups
|
||||
'lasers': 'Laser',
|
||||
'projectiles': 'Projektilwaffen',
|
||||
'ordnance': 'Artillerie',
|
||||
|
||||
// Armour modules
|
||||
'Lightweight Alloy': 'leichte Legierung',
|
||||
'Reinforced Alloy': 'verstärkte Legierung',
|
||||
'Military Grade Composite': 'Militär-Komposit',
|
||||
'Mirrored Surface Composite': 'Gespiegelte-Oberfläche-Komposit',
|
||||
'Reactive Surface Composite': 'Reaktive-Oberfläche-Komposit',
|
||||
|
||||
// Scanner modules
|
||||
'scanners': 'Scanner',
|
||||
'Basic Discovery Scanner': 'Aufklärungsscanner (einf.)',
|
||||
'Advanced Discovery Scanner': 'Aufklärungsscanner (fortgeschr.)',
|
||||
'Detailed Surface Scanner': 'Detail-Oberflächenscanner',
|
||||
'Intermedia Discovery Scanner': 'Intermedia Discovery Scanner',
|
||||
|
||||
// Docking modules
|
||||
'Standard Docking Computer': 'Standard-Landecomputer',
|
||||
|
||||
// Point defence modules
|
||||
'Point Defence': 'Punktverteidigung',
|
||||
|
||||
// Chaff launcher modules
|
||||
'Chaff Launcher': 'Düppel-Werfer',
|
||||
|
||||
// Heat sink launcher modules
|
||||
'Heat Sink Launcher': 'Kühlkörperwerfer',
|
||||
|
||||
// Panel headings and subheadings
|
||||
'power and costs': 'Energie und Kosten',
|
||||
'costs': 'Kosten',
|
||||
'retrofit costs': 'Umrüstkosten',
|
||||
'reload costs': 'Nachladekosten',
|
||||
rename: 'umbenennen',
|
||||
repair: 'reparieren',
|
||||
reset: 'zurücksetzen',
|
||||
ret: 'eing', // Retracted abbreviation
|
||||
retracted: 'eingefahren', // Weapons/Hardpoints retracted
|
||||
'retrofit costs': 'Änderungskosten', // The cost difference when upgrading / downgrading a component
|
||||
'retrofit from': 'nachrüsten von', // Retrofit from Build A against build B
|
||||
ROF: 'Kad', // Rate of Fire abbreviation
|
||||
roles: 'Rollen', // Commander/Ship build roles - e.g. Trader, Bounty-Hunter, Explorer, etc
|
||||
save: 'speichern',
|
||||
sell: 'verkaufen',
|
||||
settings: 'Einstellungen', // Coriolis application settings
|
||||
shields: 'Schilde',
|
||||
ship: 'Schiff',
|
||||
ships: 'Schiffe',
|
||||
shortened: 'gekürzt', // Standard/Stock build of a ship when purchased new
|
||||
size: 'Größe',
|
||||
skip: 'überspringen', // Skip past something / ignore it
|
||||
speed: 'Geschwindigkeit',
|
||||
standard: 'Grundausstattung', // Standard / Common modules (FSD, power plant, life support, etc)
|
||||
Stock: 'Standard', // Thermal-load abbreviation
|
||||
strength: 'Stärke', // Strength in reference to Shield Strength
|
||||
subtotal: 'Zwischensumme',
|
||||
time: 'Dauer', // time it takes to complete something
|
||||
tooltips: 'Tooltips', // Tooltips setting - show/hide
|
||||
total: 'gesamt',
|
||||
'total range': 'Gesamtbereich',
|
||||
Trader: 'Händler', // Trader role
|
||||
type: 'Typ',
|
||||
'unit cost': 'Kosten pro Einheit',
|
||||
unladen: 'unbeladen', // No cargo or fuel
|
||||
'profiles': 'Profile',
|
||||
'engine profile': 'Antriebsprofil',
|
||||
'fsd profile': 'Frameshit Antriebsprofil',
|
||||
'movement profile': 'Bewegungsprofil',
|
||||
'damage to opponent\'s shields': 'Gegnerischer Schildschaden',
|
||||
'damage to opponent\'s hull': 'Gegnerischer Hüllenschaden',
|
||||
'offence': 'Offensiv',
|
||||
'defence': 'Defensiv',
|
||||
'shield metrics': 'Schildwerte',
|
||||
'raw shield strength': 'Pure Schildstärke',
|
||||
'shield sources': 'Schildzusammensetzung',
|
||||
'damage taken': 'Erhaltener Schaden',
|
||||
'effective shield': 'Effektiver Schildwert',
|
||||
'armour metrics': 'Panzerungswerte',
|
||||
'raw armour strength': 'Pure Panzerungsstärke',
|
||||
'armour sources': 'Panzerungszusammensetzung',
|
||||
'raw module armour': 'Pure Modulpanzerung',
|
||||
'effective armour': 'Effektive Panzerung',
|
||||
'offence metrics': 'Offensivwerte',
|
||||
'defence metrics': 'Defensivwerte',
|
||||
|
||||
// internal module panel header
|
||||
'Maximize Jump Range': 'Sprungreichweite maximieren',
|
||||
'roles': 'Rollen',
|
||||
'Multi-purpose': 'Allrounder',
|
||||
'Combat': 'Kampf',
|
||||
'Trader': 'Handel',
|
||||
'Shielded Trader': 'Handel (mit Schild)',
|
||||
'Explorer': 'Entdecker',
|
||||
'Planetary Explorer': 'Planetenentdecker',
|
||||
'Miner': 'Erzabbau',
|
||||
'Shielded Miner': 'Erzabbau (mit Schild)',
|
||||
'Racer': 'Geschwindigkeit',
|
||||
|
||||
// Misc items
|
||||
'fuel carried': 'geladener Treibstoff',
|
||||
'cargo carried': 'geladene Fracht',
|
||||
'ship control': 'Energieverteilung',
|
||||
'opponent': 'Gegner',
|
||||
'opponent\'s shields': 'Gegnerische Schilde',
|
||||
'opponent\'s armour': 'Gegenerische Panzerung',
|
||||
'shield damage sources': 'Schadensquellen (Schild)',
|
||||
'armour damage sources': 'Schadensquellen (Panzerung)',
|
||||
'never': 'Niemals',
|
||||
'stock': 'Standard',
|
||||
'boost': 'Boost',
|
||||
'ship': 'Schiff',
|
||||
'laden': 'Beladen',
|
||||
'unladen': 'Leer',
|
||||
'jump range': 'Sprungreichweite',
|
||||
'total laden': 'gesamt beladen',
|
||||
'total unladen': 'gesamt leer',
|
||||
'cargo': 'Fracht',
|
||||
'hull': 'Hülle',
|
||||
'Enter Name': 'Name eingeben',
|
||||
'fuel': 'Tank',
|
||||
|
||||
// Items on the ship list page
|
||||
// Ship list
|
||||
'manufacturer': 'Hersteller',
|
||||
'cost': 'Preis',
|
||||
'size': 'Größe',
|
||||
'small': 'Klein',
|
||||
'medium': 'Mittel',
|
||||
'large': 'Groß',
|
||||
'agility': 'MNV',
|
||||
'base': 'Basis',
|
||||
'armour': 'Panzerung',
|
||||
'shields': 'Schilde',
|
||||
'jump': 'Sprung',
|
||||
'core module classes': 'Basismodulklassen',
|
||||
'Power Plant': 'Kraftwerk',
|
||||
th: 'Schubdüsen',
|
||||
fsd: 'Frameshiftantrieb',
|
||||
ls: 'Lebenserhaltung',
|
||||
pd: 'Energieverteiler',
|
||||
s: 'Sensoren',
|
||||
'hardpoints': 'Aufhängungen',
|
||||
'internal compartments': 'Optionale Modulklassen',
|
||||
|
||||
// Menu items
|
||||
'ships': 'Schiffe',
|
||||
'builds': 'eigene builds',
|
||||
'compare': 'Vergleiche',
|
||||
'compare all': 'Alle vergleichen',
|
||||
'create new': 'Neu anlegen',
|
||||
'none created': 'Keine angelegt',
|
||||
'insurance': 'Versicherung',
|
||||
'discount': 'Nachlass',
|
||||
'settings': 'Einstellungen',
|
||||
'module resistances': 'Modulwiderstände',
|
||||
'comparisons': 'Vergleiche',
|
||||
'backup': 'Sichern',
|
||||
'detailed export': 'Detaillierter Export',
|
||||
'import': 'Importieren',
|
||||
'delete all': 'Alles löschen',
|
||||
'about': 'Über',
|
||||
|
||||
|
||||
// Items on the outfitting page
|
||||
'core internal': 'Intern (basis)',
|
||||
'optional internal': 'Intern (optional)',
|
||||
'utility mounts': 'Werkzeug-Steckplätze',
|
||||
WEP: 'WAF', // Abbreviation - Weapon recharge rate for power distributor
|
||||
yes: 'ja'
|
||||
'empty': 'leer',
|
||||
'empty all': 'Alles leeren',
|
||||
|
||||
// Help text
|
||||
HELP_TEXT: `
|
||||
<h1>Einführung</h1>
|
||||
Coriolis ist ein Schiffskonfigurator für Elite:Dangerous. Diese Hilfedatei versorgt dich mit allen Informationen die du benötigst um Coriolis zu benutzen.
|
||||
|
||||
<h1>Importiere dein Schiff nach Coriolis</h1>
|
||||
Often, you will want to start with your existing ship in Coriolis and see how particular changes might affect it, for example upgrading your FSD. There are a number of tools that can be used to import your ship without you having to create it manually. This has the added benefit of copying over any engineering modifications that have taken place as well. </p>
|
||||
|
||||
<h2>Importiere dein Schiff von EDDI</h2>
|
||||
To import your ship from EDDI first ensure that your connection to the Frontier servers' companion API is working. To do this check the 'Companion App' tab where you should see "Your connection to the companion app is operational". If not then follow the instructions in the companion app tab in EDDI to connect to the Frontier servers.</p>
|
||||
|
||||
Once you have a working companion API connection go to the 'Shipyard' tab. At the right-hand side of each ship is an 'Export to Coriolis' button that will open your default web browser in Coriolis with the ship's build. </p>
|
||||
|
||||
Note that Internet Explorer and Edge might not import correctly, due to their internal restrictions on URL length. If you find that this is the case then please change your default browser to Chrome. </p>
|
||||
|
||||
Also, the imported information does not provide any data on the power priority or enabled status of your cargo hatch. Coriolis sets this item to have a power priority of "5" and to be disabled by default. You can change this after import in the Power Management section. </p>
|
||||
|
||||
<h2>Importiere dein Schiff von EDMC</h2>
|
||||
To import your ship from EDMC once your connection to the Frontier servers' companion API is working go to 'Settings ->Configuration' and set the 'Preferred Shipyard' to 'Coriolis'. Once this is set up clicking on your ship in the main window will open your default web browser in Coriolis with the ship's build.</p>
|
||||
|
||||
Note that Internet Explorer and Edge might not import correctly, due to their internal restrictions on URL length. If you find that this is the case then please change your default browser to Chrome. </p>
|
||||
|
||||
<h1>Understanding And Using The Outfitting Panels</h1>
|
||||
The outfitting page is where you will spend most of your time, and contains the information for your ship. Information on each of the panels is provided below. </p>
|
||||
|
||||
<h2>Schlüsselwerte</h2>
|
||||
Along the top of the screen are some of the key values for your build. This is a handy reference for the values, but more information is provided for the values in the further panels. </p>
|
||||
|
||||
Here, along with most places in Coriolis, acronyms will have tooltips explaining what they mean. Hover over the acronym to obtain more detail, or look in the glossary at the end of this help.</p>
|
||||
|
||||
All values are the highest possible, assuming that you an optimal setup for that particular value (maximum pips in ENG for speed, minimum fuel for jump range, etc.). This means that these values will not be affected by changes to pip settings. Details of the specific setup for each value are listed in the associated tootip.</p>
|
||||
|
||||
<h2>Module</h2>
|
||||
The next set of panels laid out horizontally across the screen contain the modules you have put in your build. From left to right these are the core modules, the internal modules, the hardpoints and the utility mounts. These represent the available slots in your ship and cannot be altered. Each slot has a class, or size, and in general any module up to a given size can fit in a given slot (exceptions being bulkheads, life support and sensors in core modules and restricted internal slots, which can only take a subset of module depending on their restrictions). </p>
|
||||
|
||||
To add a module to a slot left-click on the slot and select the required module. Only the modules capable of fitting in the selected slot will be shown. </p>
|
||||
|
||||
To remove a module from a slot right-click on the module. </p>
|
||||
|
||||
To move a module from one slot to another drag it. If you instead want to copy the module drag it whilst holding down the 'Alt' key. </p>
|
||||
|
||||
Clicking on the headings for each set of modules gives you the ability to either select an overall role for your ship (when clicking the core internal header) or a specific module with which you want to fill all applicable slots (when clicking the other headers). </p>
|
||||
|
||||
<h2>Schiffskontrolle</h2>
|
||||
The ship controls allow you to set your pips, boost, and amount of fuel and cargo that your build carries. The changes made here will effect the information supplied in the subsequent panels, giving you a clearer view of what effect different changing these items will have. </p>
|
||||
|
||||
Ship control settings are saved as part of a build. </p>
|
||||
|
||||
<h2>Gegner</h2>
|
||||
The opponet selection allows you to choose your opponent. The opponent can be either a stock build of a ship or one of your own saved builds. You can also set the engagement range between you and your opponent. Your selection here will effect the information supplied in the subsequent panels, specifically the Offence and Defence panels. </p>
|
||||
|
||||
Opponent settings are saved as part of a build. </p>
|
||||
|
||||
<h2>Energieverbrauch und Kosten Untermenü</h2>
|
||||
<h3>Energie</h3>
|
||||
The power management panel provides information about power usage and priorities. It allows you to enable and disable individual modules, as well as set power priorities for each module. Disabled modules will not be included in the build's statistics, with the exception of Shield Cell Banks as they are usually disabled when not in use and only enabled when required. </p>
|
||||
|
||||
<h3>Kosten</h3>
|
||||
The costs panel provides information about the costs for each of your modules, and the total cost and insurance for your build. By default Coriolis uses the standard costs, however discounts for your ship, modules and insurance can be altered in the 'Settings' at the top-right of the page.</p>
|
||||
|
||||
The retrofit costs provides information about the costs of changing the base build for your ship, or your saved build, to the current build.</p>
|
||||
|
||||
The reload costs provides information about the costs of reloading your current build.</p>
|
||||
|
||||
<h2>Profile</h2>
|
||||
Profiles provide graphs that show the general performance of modules in your build
|
||||
|
||||
<h3>Antriebsprofil</h3>
|
||||
The engine profile panel provides information about the capabilities of your current thrusters. The graph shows you how the maximum speed alters with the overall mass of your build. The vertical dashed line on the graph shows your current mass. Your engine profile can be altered by obtaining different thrusters or engineering your existing thrusters, and you can increase your maximum speed by adding pips to the ENG capacitor as well as reducing the amount of fuel and cargo you are carrying as well as reducing the overall weight of the build. You can also temporarily increase your speed by hitting the boost button. </p>
|
||||
|
||||
<h3>FSA Profil</h3>
|
||||
The FSD profile panel provides information about the capabilities of your current frame shift drive. The graph shows you how the maximum jump range alters with the overall mass of your build. The vertical dashed line on the graph shows your current maximum single jump range. Your FSD profile can be altered by obtaining a different FSD or engineering your existing FSD, and you can increase your maximum jump range by reducing the amount of fuel and cargo you are carrying as well as reducing the overall weight of the build, </p>
|
||||
|
||||
<h3>Bewegungsprofil</h3>
|
||||
The movement profile panel provides information about the capabilities of your current thrusters with your current overall mass and ENG pips settings. The diagram shows your ability to move and rotate in the different axes:
|
||||
|
||||
<dl>
|
||||
<dt>Geschwindigkeit</dt><dd>The fastest the ship can move, in metres per second</dd>
|
||||
<dt>Kippen</dt><dd>The fastest the ship can raise or lower its nose, in degrees per second</dd>
|
||||
<dt>Rollen</dt><dd>The fastest the ship can roll its body, in degrees per second</dd>
|
||||
<dt>Gieren</dt><dd>The fastest the ship can turn its nose left or right, in degrees per second</dd>
|
||||
</dl>
|
||||
|
||||
Your movement profile can be altered by obtaining different thrusters or engineering your existing thrusters, and you can increase your movement values by adding pips to the ENG capacitor as well as reducing the amount of fuel and cargo you are carrying as well as reducing the overall weight of the build. You can also temporarily increase your movement profile by hitting the boost button. </p>
|
||||
|
||||
<h3>Schadensprofil</h3>
|
||||
The damage profile provides two graphs showing how the the build's damage to the opponent's shields and hull change with engagement range. The vertical dashed line on the graph shows your current engagement range. This combines information about the build's weapons with the opponent's shields and hull to provide an accurate picture of sustained damage that can be inflicted on the opponent. </p>
|
||||
|
||||
<h2>Offensive</h2>
|
||||
<h3>Zusammenfassung</h3>
|
||||
The offence summary provides per-weapon information about sustained damage per second inflicted to shields and hull, along with a measure of effectiveness of that weapon. The effectiveness value has a tooltip that provides a breakdown of the effectiveness, and can include reductions or increases due to range, resistance, and either power distributor (for shields) or hardness (for hull). The final effectiveness value is calculated by multiplying these percentages together. </p>
|
||||
|
||||
<h3>Offensivwerte</h3>
|
||||
The offence metrics panel provides information about your offence. </p>
|
||||
|
||||
Time to drain is a measure of how quickly your WEP capacitor will drain when firing all weapons. It is affected by the number of pips you have in your WEP capacitor, with more pips resulting in a higher WEP recharge rate and hence a longer time to drain. </p>
|
||||
|
||||
The next value is the time it will take you to remove your opponent's shields. This assumes that you have 100% time on target and that your engagement range stays constant. Note that if your time to remove shields is longer than your time to drain this assumes that you continue firing throughout, inflicting lower damage due to the reduced energy in your WEP capacitor. </p>
|
||||
|
||||
The next value is the time it will take you to remove your opponent's armour. This follows the same logic as the time to remove shields. </p>
|
||||
|
||||
<h3>Schadensquellen (Schilde)</h3>
|
||||
The shield damage sources provides information about the sources of damage to your opponent by damage type. For each applicable type of damage (absolute explosive, kinetic, thermal) a sustained damage per second value is provided. </p>
|
||||
|
||||
<h3>Schadensquelle (Hülle)</h3>
|
||||
The hull damage sources provides information about the sources of damage to your opponent by damage type. For each applicable type of damage (absolute explosive, kinetic, thermal) a sustained damage per second value is provided. </p>
|
||||
|
||||
<h2>Defensive</h2>
|
||||
<h3>Schildwerte</h3>
|
||||
The shield metrics provides information about your shield defence. </p>
|
||||
|
||||
Raw shield strength is the sum of the shield from your generator, boosters and shield cell banks. A tooltip provides a breakdown of these values. </p>
|
||||
|
||||
The time the shields will hold for is the time it will take your opponent' to remove your shields. This assumes that they have 100% time on target and that the engagement range stays constant. It also assumes that you fire all of your shield cell banks prior to your shields being lost. </p>
|
||||
|
||||
The time the shields will recover in is the time it will take your shields to go from collapsed (0%) to recovered (50%). This is affected by the number of pips you have in your SYS capacitor. </p>
|
||||
|
||||
The time the shields will recharge in is the time it will take your shields to go from recovered (50%) to full (100%). This is affected by the number of pips you have in your SYS capacitor. </p>
|
||||
|
||||
</h3>Schildstärke (Zusammensetzung)</h3>
|
||||
This chart provides information about the sources of your shields. For each applicable source of shields (generator, boosters, shield cell banks) a value is provided. </p>
|
||||
|
||||
</h3>Schadensauswirkung</h3>
|
||||
This graph shows how the initial damage from the weapons of each type are reduced before their damage is applied to the shields. For each type of damage (absolute, explosive, kinetic, thermal) a percentage of the initial damage is provided. A tooltip provides a breakdown of these values. </p>
|
||||
|
||||
</h3>Effektiver Schildwert</h3>
|
||||
This graph shows the effective shield for each damage type, found by dividing the raw shield value by the damage taken for that type. </p>
|
||||
|
||||
<h3>Panzerungswerte</h3>
|
||||
The armour metrics provides information about your armour defence. </p>
|
||||
|
||||
Raw armour strength is the sum of the armour from your bulkheads and hull reinforcement packages. A tooltip provides a breakdown of these values. </p>
|
||||
|
||||
The time the armour will hold for is the time it will take your opponent' to take your armour to 0. This assumes that they have 100% time on target, the engagement range stays constant, and that all damage is dealt to the armour rather than modules. </p>
|
||||
|
||||
Raw module armour is the sum of the protection from your module reinforcement packages. </p>
|
||||
|
||||
Protection for hardpoints is the amount of protection that your module reinforcement packages provide to hardpoints. This percentage of damage to the hardpoints will be diverted to the module reinforcement packages. </p>
|
||||
|
||||
Protection for all other modules is the amount of protection that your module reinforcement packages provide to everything other than hardpoints. This percentage of damage to the modules will be diverted to the module reinforcement packages. </p>
|
||||
|
||||
</h3>Hüllenpanzerung (Zusammensetzung)</h3>
|
||||
This chart provides information about the sources of your armour. For each applicable source of shields (bulkheads, hull reinforcement packages) a value is provided. </p>
|
||||
|
||||
</h3>Schadensauswirkung</h3>
|
||||
This graph shows how the initial damage from the weapons of each type are reduced before their damage is applied to the armour. For each type of damage (absolute, explosive, kinetic, thermal) a percentage of the initial damage is provided. A tooltip provides a breakdown of these values. </p>
|
||||
|
||||
</h3>Effektive Hüllenpanzerung</h3>
|
||||
This graph shows the effective armour for each damage type, found by dividing the raw armour value by the damage taken for that type. </p>
|
||||
|
||||
<h1>Tastaturkommandos</h1>
|
||||
<dl>
|
||||
<dt>Ctrl-b</dt><dd>Boost an-/auschalten</dd>
|
||||
<dt>Ctrl-e</dt><dd>open Export Dialog (ausschließlich Ausstattungsseite)</dd>
|
||||
<dt>Ctrl-h</dt><dd>Öffne den Hilfedialog</dd>
|
||||
<dt>Ctrl-i</dt><dd>Öffne den Importdialog</dd>
|
||||
<dt>Ctrl-o</dt><dd>Öffne den Kurzlinkdialog</dd>
|
||||
<dt>Ctrl-left-arrow</dt><dd>Erhöhe den SYS Kondensator</dd>
|
||||
<dt>Ctrl-up-arrow</dt><dd>Erhöhe den ANT Kondensator</dd>
|
||||
<dt>Ctrl-right-arrow</dt><dd>Erhöhe den WAF Kondensator</dd>
|
||||
<dt>Ctrl-down-arrow</dt><dd>Setze den Energieverteiler zurück</dd>
|
||||
<dt>Esc</dt><dd>Schließe jeden offenen Dialog</dd>
|
||||
</dl>
|
||||
<h1>Glossar</h1>
|
||||
<dl>
|
||||
<dt>Absoluter Schaden</dt><dd>A type of damage, without any protection. Absolute damage is always dealt at 100% regardless of if the damage is to shields, hull or modules, and irrespective of resistances</dd>
|
||||
<dt>SPS</dt><dd>Schaden pro Sekunde; the amount of damage that a weapon or a ship can deal per second to a target under optimum conditions</dd>
|
||||
<dt>EPS</dt><dd>Energie pro Sekunde; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing</dd>
|
||||
<dt>HPS</dt><dd>Hitze pro Sekunde; the amount of heat that a weapon or a ship generates per second when firing</dd>
|
||||
<dt>Effektivität</dt><dd>A comparison of the maximum DPS of a given weapon to the actual DPS of the given weapon in a specific situation. DPS can be reduced by range to the target, the target's hull and shield resistances, and the target's hardness</dd>
|
||||
<dt>Explosiver Schaden</dt><dd>A type of damage, protected against by explosive resistance</dd>
|
||||
<dt>Hüllenhärte</dt><dd>The inherent resistance to damage of a ship's hull. Hardness is defined on a per-ship basis and there is currently nothing that can be done to change it. Hardness of a ship's hull is compared to the piercing of weapons: if piercing is higher than hardness the weapon does 100% damage, otherwise it does a fraction of its damage calculated as piercing/hardness</dd>
|
||||
<dt>Schadensabfall</dt><dd>The distance at which a weapons starts to do less damage than its stated DPS</dd>
|
||||
<dt>Kinetischer Schaden</dt><dd>A type of damage, protected against by kinetic resistance</dd>
|
||||
<dt>KSPS</dt><dd>Kontinuierlicher Schaden pro Sekunde; the amount of damage that a weapon or a ship can deal per second to a target, taking in to account ammunition reload</dd>
|
||||
<dt>KEPS</dt><dd>Kontinuierliche Energie pro Sekunde; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing, taking in to account ammunition reload</dd>
|
||||
<dt>KHPS</dt><dd>Kontinuierliche Hitze pro Sekunde; the amount of heat that a weapon or a ship generates per second when firing, taking in to account ammunition reload</dd>
|
||||
<dt>Thermischer Schaden</dt><dd>A type of damage, protected against by thermal resistance</dd>
|
||||
</dl>
|
||||
|
||||
`,
|
||||
};
|
||||
|
||||
@@ -75,7 +75,7 @@ export const terms = {
|
||||
PHRASE_EFFECTIVE_SDPS_ARMOUR: 'SDPS against armour',
|
||||
|
||||
TT_SUMMARY_SPEED: 'With full fuel tank and 4 pips to ENG',
|
||||
TT_SUMMARY_SPEED_NONFUNCTIONAL: 'Thrusters powered off or over maximum mass',
|
||||
TT_SUMMARY_SPEED_NONFUNCTIONAL: 'Thrusters powered off or over maximum mass with full fuel and cargo loads',
|
||||
TT_SUMMARY_BOOST: 'With full fuel tank and 4 pips to ENG',
|
||||
TT_SUMMARY_BOOST_NONFUNCTIONAL: 'Power distributor not able to supply enough power to boost',
|
||||
TT_SUMMARY_SHIELDS: 'Raw shield strength, including boosters',
|
||||
@@ -286,6 +286,44 @@ export const terms = {
|
||||
bulkheads: 'Bulkheads',
|
||||
reinforcement: 'Reinforcement',
|
||||
|
||||
// Panel headings and subheadings
|
||||
'power and costs': 'power and costs',
|
||||
'costs': 'costs',
|
||||
'retrofit costs': 'retrofit costs',
|
||||
'reload costs': 'reload costs',
|
||||
'profiles': 'profiles',
|
||||
'engine profile': 'engine profile',
|
||||
'fsd profile': 'fsd profile',
|
||||
'movement profile': 'movement profile',
|
||||
'damage to opponent\'s shields': 'damage to opponent\'s shields',
|
||||
'damage to opponent\'s hull': 'damage to opponent\'s hull',
|
||||
'offence': 'offence',
|
||||
'defence': 'defence',
|
||||
'shield metrics': 'shield metrics',
|
||||
'raw shield strength': 'raw shield strength',
|
||||
'shield sources': 'shield sources',
|
||||
'damage taken': 'damage taken',
|
||||
'effective shield': 'effective shield',
|
||||
'armour metrics': 'armour metrics',
|
||||
'raw armour strength': 'raw armour strength',
|
||||
'armour sources': 'armour sources',
|
||||
'raw module armour': 'raw module armour',
|
||||
'effective armour': 'effective armour',
|
||||
'offence metrics': 'offence metrics',
|
||||
'defence metrics': 'defence metrics',
|
||||
// Misc items
|
||||
'fuel carried': 'fuel carried',
|
||||
'cargo carried': 'cargo carried',
|
||||
'ship control': 'ship control',
|
||||
'opponent': 'opponent',
|
||||
'opponent\'s shields': 'opponent\'s shields',
|
||||
'opponent\'s armour': 'opponent\'s armour',
|
||||
'shield damage sources': 'shield damage sources',
|
||||
'armour damage sources': 'armour damage sources',
|
||||
'never': 'never',
|
||||
'stock': 'stock',
|
||||
'boost': 'boost',
|
||||
|
||||
// Help text
|
||||
HELP_TEXT: `
|
||||
<h1>Introduction</h1>
|
||||
|
||||
@@ -46,7 +46,7 @@ export const terms = {
|
||||
'cr': 'Compartimento de carga',
|
||||
'cs': 'Esc\u00e1ner de carga',
|
||||
'cells': 'celdas',
|
||||
'Chaff Launcher': 'Lanzador de birutas',
|
||||
'Chaff Launcher': 'Lanzador de virutas',
|
||||
'close': 'Cerrar',
|
||||
'cc': 'Controlador de Drones de Recogida',
|
||||
'compare': 'Comparar',
|
||||
|
||||
@@ -14,20 +14,315 @@ export const formats = {
|
||||
};
|
||||
|
||||
export const terms = {
|
||||
// Phrases
|
||||
PHRASE_BACKUP_DESC: 'Сохраните все данные перед переносом в другой браузер или устройство', // Backup of all Coriolis data to save or transfer to another browser/device
|
||||
PHRASE_CONFIRMATION: 'Вы уверены?', // Are You Sure?
|
||||
PHRASE_EXPORT_DESC: 'Детальный JSON-экспорт вашей сборки для использования в других местах и инструментах', // A detailed JSON export of your build for use in other sites and tools
|
||||
PHRASE_FASTEST_RANGE: 'Последовательные прыжки максимальной дальности', // Consecutive max range jumps
|
||||
PHRASE_IMPORT: 'Для импорта вставьте код в эту форму', // Paste JSON or import here
|
||||
PHRASE_LADEN: 'Масса корабля с учётом топлива и грузов', // Ship Mass + Fuel + Cargo
|
||||
PHRASE_NO_BUILDS: 'Нечего сравнивать', // No builds added to comparison!
|
||||
PHRASE_NO_RETROCH: 'нет ранних версий сборки\\конфигурации', // No Retrofitting changes
|
||||
PHRASE_SELECT_BUILDS: 'Выберите конфигурацию для сравнения', // Select Builds to Compare
|
||||
PHRASE_SG_RECHARGE: 'восстановление с 60% до 100% объема щита', // Time from 50% to 100% Charge
|
||||
PHRASE_SG_RECOVER: 'восстановление [до 60%] после снятия щита', // Recovery (to 50%) after collapse
|
||||
PHRASE_UNLADEN: 'Масса корабля без учета топлива и грузов', // Ship Mass excluding Fuel and Cargo
|
||||
PHRASE_UPDATE_RDY: 'Доступно обновление. Нажмите для обновления.', // Update Available! Click to Refresh
|
||||
PHRASE_ALT_ALL: 'Alt + Нажатие для заполнения всех слотов',
|
||||
PHRASE_BACKUP_DESC: 'Сохраните все данные перед переносом в другой браузер или устройство',
|
||||
PHRASE_CONFIRMATION: 'Вы уверены?',
|
||||
PHRASE_EXPORT_DESC: 'Детальный JSON-экспорт вашей сборки для использования в других местах и инструментах',
|
||||
PHRASE_FASTEST_RANGE: 'Последовательные прыжки максимальной дальности',
|
||||
PHRASE_IMPORT: 'Для импорта вставьте код в эту форму',
|
||||
PHRASE_LADEN: 'Масса корабля с учётом топлива и грузов',
|
||||
PHRASE_NO_BUILDS: 'Нечего сравнивать',
|
||||
PHRASE_NO_RETROCH: 'Нет ранних версий сборки',
|
||||
PHRASE_SELECT_BUILDS: 'Выберите конфигурацию для сравнения',
|
||||
PHRASE_SG_RECHARGE: 'Восстановление с 50% до 100% объема щита, учитывая полный аккумулятор СИС в начале',
|
||||
PHRASE_SG_RECOVER: 'Восстановление с 0% до 50% объема щита, учитывая полный аккумулятор СИС в начале',
|
||||
PHRASE_UNLADEN: 'Масса корабля без учета топлива и грузов',
|
||||
PHRASE_UPDATE_RDY: 'Доступна новая версия. Нажмите для обновления.',
|
||||
PHRASE_ENGAGEMENT_RANGE: 'Дистанция между кораблём и целью',
|
||||
PHRASE_SELECT_BLUEPRINT: 'Нажмите чтобы выбрать чертёж',
|
||||
PHRASE_BLUEPRINT_WORST: 'Худшие основные значения для чертежа',
|
||||
PHRASE_BLUEPRINT_RANDOM: 'Случайный выбор между худшими и лучшими значениями для этого чертежа',
|
||||
PHRASE_BLUEPRINT_BEST: 'Лучшие основные значения для чертежа',
|
||||
PHRASE_BLUEPRINT_EXTREME: 'Лучшие положительные и худшие отрицательные основные значения для чертежа',
|
||||
PHRASE_BLUEPRINT_RESET: 'Убрать все изменения и чертёж',
|
||||
PHRASE_SELECT_SPECIAL: 'Нажмите чтобы выбрать экспериментальный эффект',
|
||||
PHRASE_NO_SPECIAL: 'Без экспериментального эффекта',
|
||||
PHRASE_SHOPPING_LIST: 'Станции что продают эту сборку',
|
||||
PHRASE_REFIT_SHOPPING_LIST: 'Станции что продают необходимые модули',
|
||||
PHRASE_TOTAL_EFFECTIVE_SHIELD: 'Общий урон что может быть нанесён в каждым типе, если используются все щитонакопители',
|
||||
PHRASE_TIME_TO_LOSE_SHIELDS: 'Щиты продержатся',
|
||||
PHRASE_TIME_TO_RECOVER_SHIELDS: 'Щиты восстановятся за',
|
||||
PHRASE_TIME_TO_RECHARGE_SHIELDS: 'Щиты будут заряжены за',
|
||||
PHRASE_SHIELD_SOURCES: 'Подробности энергии щита',
|
||||
PHRASE_EFFECTIVE_SHIELD: 'Эффективная сила щита против разных типов урона',
|
||||
PHRASE_ARMOUR_SOURCES: 'Подробности состава брони',
|
||||
PHRASE_EFFECTIVE_ARMOUR: 'Эффективная сила брони против разных типов урона',
|
||||
PHRASE_DAMAGE_TAKEN: '% общих повреждений полученных в разных типах урона',
|
||||
PHRASE_TIME_TO_LOSE_ARMOUR: 'Броня продержится',
|
||||
PHRASE_MODULE_PROTECTION_EXTERNAL: 'Защита гнёзд',
|
||||
PHRASE_MODULE_PROTECTION_INTERNAL: 'Защита всех остальных модулей',
|
||||
PHRASE_SHIELD_DAMAGE: 'Подробности источников поддерживаемого ДПС против щитов',
|
||||
PHRASE_ARMOUR_DAMAGE: 'Подробности источников поддерживаемого ДПС против брони',
|
||||
|
||||
PHRASE_TIME_TO_REMOVE_SHIELDS: 'Снимет щиты за',
|
||||
TT_TIME_TO_REMOVE_SHIELDS: 'Непрерывным огнём из всех орудий',
|
||||
PHRASE_TIME_TO_REMOVE_ARMOUR: 'Снимет броню за',
|
||||
TT_TIME_TO_REMOVE_ARMOUR: 'Непрерывным огнём из всех орудий',
|
||||
PHRASE_TIME_TO_DRAIN_WEP: 'Опустошит ОРУЖ за',
|
||||
TT_TIME_TO_DRAIN_WEP: 'Время за которое опустошится аккумулятор ОРУЖ при стрельбе из всех орудий',
|
||||
TT_TIME_TO_LOSE_SHIELDS: 'Против поддерживаемой стрельбы из всех орудий противника',
|
||||
TT_TIME_TO_LOSE_ARMOUR: 'Против поддерживаемой стрельбы из всех орудий противника',
|
||||
TT_MODULE_ARMOUR: 'Броня защищаюшае модули от урона',
|
||||
TT_MODULE_PROTECTION_EXTERNAL: 'Процент урона перенаправленного от гнёзд на наборы для усиления модулей',
|
||||
TT_MODULE_PROTECTION_INTERNAL: 'Процент урона перенаправленного от модулей вне гнёзд на наборы для усиления модулей',
|
||||
|
||||
TT_EFFECTIVE_SDPS_SHIELDS: 'Реальный поддерживаемый ДПС пока аккумулятор ОРУЖ не пуст',
|
||||
TT_EFFECTIVENESS_SHIELDS: 'Эффективность в сравнении с попаданием по цели с 0-сопротивляемостью без пунктов в СИС на 0 метрах',
|
||||
TT_EFFECTIVE_SDPS_ARMOUR: 'Реальный поддерживаемый ДПС пока аккумулятор ОРУЖ не пуст',
|
||||
TT_EFFECTIVENESS_ARMOUR: 'Эффективность в сравнении с попаданием по цели с 0-сопротивляемостью на 0 метрах',
|
||||
|
||||
PHRASE_EFFECTIVE_SDPS_SHIELDS: 'ПДПС против щитов',
|
||||
PHRASE_EFFECTIVE_SDPS_ARMOUR: 'ПДПС против брони',
|
||||
|
||||
TT_SUMMARY_SPEED: 'С полным топливным баком и 4 пунктами в ДВИ',
|
||||
TT_SUMMARY_SPEED_NONFUNCTIONAL: 'маневровые двигатели выключены или превышена максимальная масса с топливом и грузом',
|
||||
TT_SUMMARY_BOOST: 'С полным топливным баком и 4 пунктами в ДВИ',
|
||||
TT_SUMMARY_BOOST_NONFUNCTIONAL: 'Распределитель питания не может обеспечить достаточно энергии для форсажа',
|
||||
TT_SUMMARY_SHIELDS: 'Чистая сила щита, включая усилители',
|
||||
TT_SUMMARY_SHIELDS_NONFUNCTIONAL: 'Шитогенератор отсутствует или выключен',
|
||||
TT_SUMMARY_INTEGRITY: 'Целостность корабля, включая переборки и наборы для усиления корпуса',
|
||||
TT_SUMMARY_HULL_MASS: 'Масса корпуса без каких-либо модулей',
|
||||
TT_SUMMARY_UNLADEN_MASS: 'Масса корпуса и модулей без топлива и груза',
|
||||
TT_SUMMARY_LADEN_MASS: 'Масса корпуса и модулей с топливом и грузом',
|
||||
TT_SUMMARY_DPS: 'Урон в секунду при стрельбе из всех орудий',
|
||||
TT_SUMMARY_EPS: 'Расход аккумулятора ОРУЖ в секунду при стрельбе из всех орудий',
|
||||
TT_SUMMARY_TTD: 'Время расхода аккумулятора ОРУЖ при стрельбе из всех орудий и с 4 пунктами в ОРУЖ',
|
||||
TT_SUMMARY_MAX_SINGLE_JUMP: 'Самый дальний возможный прыжок без груза и с топливом достаточным только на сам прыжок',
|
||||
TT_SUMMARY_UNLADEN_SINGLE_JUMP: 'Самый дальний возможный прыжок без груза и с полным топливным баком',
|
||||
TT_SUMMARY_LADEN_SINGLE_JUMP: 'Самый дальний возможный прыжок с полным грузовым отсеком и с полным топливным баком',
|
||||
TT_SUMMARY_UNLADEN_TOTAL_JUMP: 'Самая дальняя общая дистанция без груза, с полным топливным баком и при прыжках на максимальное расстояние',
|
||||
TT_SUMMARY_LADEN_TOTAL_JUMP: 'Самая дальняя общая дистанция с полным грузовым отсеком, с полным топливным баком и при прыжках на максимальное расстояние',
|
||||
|
||||
HELP_MODIFICATIONS_MENU: 'Ткните на номер чтобы ввести новое значение, или потяните вдоль полосы для малых изменений',
|
||||
|
||||
// Other languages fallback to these values
|
||||
// Only Translate to other languages if the name is different in-game
|
||||
am: 'Блок Автом. Полевого Ремонта',
|
||||
bh: 'Переборки',
|
||||
bl: 'Пучковый Лазер',
|
||||
bsg: 'Двухпоточный Щитогенератор',
|
||||
c: 'Орудие',
|
||||
cc: 'Контроллер магнитного снаряда для сбора',
|
||||
ch: 'Разбрасыватель дипольных отражателей',
|
||||
cr: 'Грузовой стеллаж',
|
||||
cs: 'Сканер содержимого',
|
||||
dc: 'Стыковочный компьютер',
|
||||
ec: 'Электр. противодействие',
|
||||
fc: 'Залповое орудие',
|
||||
fh: 'Ангар для истребителя',
|
||||
fi: 'FSD-перехватчик',
|
||||
fs: 'Топливозаборник',
|
||||
fsd: 'Рамочно Сместительный двигатель',
|
||||
ft: 'Топливный бак',
|
||||
fx: 'Контроллер магнитного снаряда для топлива',
|
||||
hb: 'Контроллер магнитного снаряда для взлома трюма',
|
||||
hr: 'Набор для усиления корпуса',
|
||||
hs: 'Теплоотводная катапульта',
|
||||
kw: 'Сканер преступников',
|
||||
ls: 'Система жизнеобеспечения',
|
||||
mc: 'Многоствольное орудие',
|
||||
ml: 'Проходочный лазер',
|
||||
mr: 'Ракетный лоток',
|
||||
mrp: 'Набор для усиления модуля',
|
||||
nl: 'Мины',
|
||||
pa: 'Ускоритель плазмы',
|
||||
pas: 'Комплект для сближения с планетой',
|
||||
pc: 'Контроллер магнитного снаряда для геологоразведки',
|
||||
pce: 'Каюта пассажира эконом-класса',
|
||||
pci: 'Каюта пассажира бизнес-класса',
|
||||
pcm: 'Каюта пассажира первого класса',
|
||||
pcq: 'Каюта пассажира класса люкс',
|
||||
pd: 'Распределитель питания',
|
||||
pl: 'Ипмульсный лазер',
|
||||
po: 'Точечная оборона',
|
||||
pp: 'Силовая установка',
|
||||
psg: 'Призматический щитогенератор',
|
||||
pv: 'Гараж для планетарного транспорта',
|
||||
rf: 'Устройство переработки',
|
||||
rg: 'Электромагнитная пушка',
|
||||
s: 'Сенсоры',
|
||||
sb: 'Усилитель щита',
|
||||
sc: 'Сканер обнаружения',
|
||||
scb: 'Щитонакопитель',
|
||||
sg: 'Щитогенератор',
|
||||
ss: 'Сканер Поверхностей',
|
||||
t: 'Маневровые двигатели',
|
||||
tp: 'Торпедная стойка',
|
||||
ul: 'Пульсирующие лазеры',
|
||||
ws: 'Сканер следа FSD',
|
||||
|
||||
// Items on the outfitting page
|
||||
// Notification of restricted slot
|
||||
emptyrestricted: 'пусто (ограниченно)',
|
||||
'damage dealt to': 'Урон нанесён',
|
||||
'damage received from': 'Урон получен от',
|
||||
'against shields': 'Против шитов',
|
||||
'against hull': 'Против корпуса',
|
||||
'total effective shield': 'Общие эффективные щиты',
|
||||
|
||||
// 'ammo' was overloaded for outfitting page and modul info, so changed to ammunition for outfitting page
|
||||
ammunition: 'Припасы',
|
||||
|
||||
// Unit for seconds
|
||||
secs: 'с',
|
||||
|
||||
rebuildsperbay: 'Построек за полосу',
|
||||
|
||||
// Blueprint rolls
|
||||
worst: 'Худшее',
|
||||
average: 'Среднее',
|
||||
random: 'Случайное',
|
||||
best: 'Лучшее',
|
||||
extreme: 'Экстремальное',
|
||||
reset: 'Обнулить',
|
||||
|
||||
// Weapon, offence, defence and movement
|
||||
dpe: 'Урон на МДж энергии',
|
||||
dps: 'Урон в Секунду',
|
||||
sdps: 'Поддерживаемый урон в секунду',
|
||||
dpssdps: 'Урон в секунду (поддерживаемый урон в секунду)',
|
||||
eps: 'Энергия в секунду',
|
||||
epsseps: 'Энергия в секунду (поддерживаемая энергия в секунду)',
|
||||
hps: 'Нагрев в секунду',
|
||||
hpsshps: 'Heat per second (sustained heat per second)',
|
||||
'damage by': 'Урон',
|
||||
'damage from': 'Урон от',
|
||||
'shield cells': 'Щитонакопители',
|
||||
'recovery': 'Восстановление',
|
||||
'recharge': 'Перезарядка',
|
||||
'engine pips': 'Пункты в двигателе',
|
||||
'4b': '4 пункта и Форсаж',
|
||||
'speed': 'Скорость',
|
||||
'pitch': 'Тангаж',
|
||||
'roll': 'Крен',
|
||||
'yaw': 'Рыскание',
|
||||
'internal protection': 'Внутренняя защита',
|
||||
'external protection': 'Внешняя защита',
|
||||
'engagement range': 'Боевое расстояние',
|
||||
'total': 'Общее',
|
||||
|
||||
// Modifications
|
||||
ammo: 'Макс. боекомплект',
|
||||
boot: 'Время загрузки',
|
||||
brokenregen: 'Скорость восстановления при пробое',
|
||||
burst: 'Длина очереди',
|
||||
burstrof: 'Скорострельность очереди',
|
||||
clip: 'Боекомплект',
|
||||
damage: 'Урон',
|
||||
distdraw: 'Тяга распределителя',
|
||||
duration: 'Продолжительность',
|
||||
eff: 'Эффективность',
|
||||
engcap: 'Ресурс двигателей',
|
||||
engrate: 'Перезарядка двигателей',
|
||||
explres: 'Сопротивление взрывам',
|
||||
facinglimit: 'Ограничение по направлению',
|
||||
hullboost: 'Увеличение корпуса',
|
||||
hullreinforcement: 'Укрепление корпуса',
|
||||
integrity: 'Целостность',
|
||||
jitter: 'Дрожание',
|
||||
kinres: 'Сопротивление китетическому урону',
|
||||
maxfuel: 'Макс. топлива на прыжок',
|
||||
mass: 'Масса',
|
||||
optmass: 'Оптимизированная масса',
|
||||
optmul: 'Оптимальный усилитель',
|
||||
pgen: 'Мощность',
|
||||
piercing: 'Бронебойность',
|
||||
power: 'Энергопотребление',
|
||||
protection: 'Защита от повреждений',
|
||||
range: 'Дальность',
|
||||
ranget: 'Дальность', // Range in time (for FSD interdictor)
|
||||
regen: 'Скорость восстановления',
|
||||
reload: 'Время перезарядки',
|
||||
rof: 'Скорострельность',
|
||||
angle: 'Угол сканера',
|
||||
scanrate: 'Скорость сканера',
|
||||
scantime: 'Время сканирования',
|
||||
shield: 'Щит',
|
||||
shieldboost: 'Усиление щитов',
|
||||
shieldreinforcement: 'Усилитель щита',
|
||||
shotspeed: 'Скорость выстрела',
|
||||
spinup: 'Время раскрутки',
|
||||
syscap: 'Ресурс систем',
|
||||
sysrate: 'Перезарядка систем',
|
||||
thermload: 'Тепловая нагрузка',
|
||||
thermres: 'Сопротивление термическому урону',
|
||||
wepcap: 'Орудийный ресурс',
|
||||
weprate: 'Перезарядка оружия',
|
||||
|
||||
// Shield generators use a different terminology
|
||||
minmass_sg: 'Мин. масса корпуса',
|
||||
optmass_sg: 'Опт. масса корпуса',
|
||||
maxmass_sg: 'Макс. масса корпуса',
|
||||
minmul_sg: 'Минимальная прочность',
|
||||
optmul_sg: 'Оптимальная прочность',
|
||||
maxmul_sg: 'Максимальная прочность',
|
||||
minmass_psg: 'Мин. масса корпуса',
|
||||
optmass_psg: 'Опт. масса корпуса',
|
||||
maxmass_psg: 'Макс. масса корпуса',
|
||||
minmul_psg: 'Минимальная прочность',
|
||||
optmul_psg: 'Оптимальная прочность',
|
||||
maxmul_psg: 'Максимальная прочность',
|
||||
minmass_bsg: 'Мин. масса корпуса',
|
||||
optmass_bsg: 'Опт. масса корпуса',
|
||||
maxmass_bsg: 'Макс. масса корпуса',
|
||||
minmul_bsg: 'Минимальная прочность',
|
||||
optmul_bsg: 'Оптимальная прочность',
|
||||
maxmul_bsg: 'Максимальная прочность',
|
||||
|
||||
range_s: 'Типовой диапозон выброса',
|
||||
|
||||
// Damage types
|
||||
absolute: 'Общий',
|
||||
explosive: 'Взрывч.',
|
||||
kinetic: 'Механич.',
|
||||
thermal: 'Тепл.',
|
||||
|
||||
// Shield sources
|
||||
generator: 'Генератор',
|
||||
boosters: 'Усилители',
|
||||
cells: 'Накопители',
|
||||
|
||||
// Armour sources
|
||||
bulkheads: 'Переборки',
|
||||
reinforcement: 'Усилители',
|
||||
|
||||
// Panel headings and subheadings
|
||||
'power and costs': 'Энергия и стоимость',
|
||||
'costs': 'Цены',
|
||||
'retrofit costs': 'Стоимость модификации',
|
||||
'reload costs': 'Стоимость перезарядки',
|
||||
'profiles': 'Графики',
|
||||
'engine profile': 'Двигатели',
|
||||
'fsd profile': 'FSD',
|
||||
'movement profile': 'Движение',
|
||||
'damage to opponent\'s shields': 'Урон щиту противника',
|
||||
'damage to opponent\'s hull': 'Урон корпусу противника',
|
||||
'offence': 'Нападение',
|
||||
'defence': 'Оборона',
|
||||
'shield metrics': 'Данные щита',
|
||||
'raw shield strength': 'Чистая мощность щита',
|
||||
'shield sources': 'Ресурсы щита',
|
||||
'damage taken': 'Полученный урон',
|
||||
'effective shield': 'Эффективный щит',
|
||||
'armour metrics': 'Данные брони',
|
||||
'raw armour strength': 'Чистая мощность брони',
|
||||
'armour sources': 'Ресурсы брони',
|
||||
'raw module armour': 'Чистая броня модулей',
|
||||
'effective armour': 'Эффективная броня',
|
||||
'offence metrics': 'Данные нападения',
|
||||
'defence metrics': 'Данные обороны',
|
||||
// Misc items
|
||||
'fuel carried': 'Топливо на борту',
|
||||
'cargo carried': 'Груз на борту',
|
||||
'ship control': 'Управление кораблём',
|
||||
'opponent': 'Противник',
|
||||
'opponent\'s shields': 'Щит противника',
|
||||
'opponent\'s armour': 'Броня противника',
|
||||
'shield damage sources': 'источники урона по щиту',
|
||||
'armour damage sources': 'источники урона по броне',
|
||||
'never': 'Никогда',
|
||||
'stock': 'базовый',
|
||||
'boost': 'Форсаж',
|
||||
|
||||
// Units / Metrics
|
||||
'/s': '/с', // Per second
|
||||
@@ -105,7 +400,7 @@ export const terms = {
|
||||
DPS: 'УВС', // Damage per second abbreviation
|
||||
efficiency: 'Эффективность', // Power Plant efficiency
|
||||
empty: 'пусто',
|
||||
ENG: 'ДВГ', // Abbreviation - Engine recharge rate for power distributor
|
||||
ENG: 'ДВИ', // Abbreviation - Engine recharge rate for power distributor
|
||||
export: 'Экспорт',
|
||||
forum: 'Форум',
|
||||
fuel: 'Топливо',
|
||||
@@ -153,12 +448,12 @@ export const terms = {
|
||||
speed: 'скорость',
|
||||
standard: 'Стандартный', // Standard / Common modules (FSD, power plant, life support, etc)
|
||||
Stock: 'Стандартная комплектация', // Thermal-load abbreviation
|
||||
SYS: 'СИСТЕМЫ', // Abbreviation - System recharge rate for power distributor
|
||||
SYS: 'СИС', // Abbreviation - System recharge rate for power distributor
|
||||
time: 'Время', // time it takes to complete something
|
||||
total: 'Всего',
|
||||
type: 'Тип',
|
||||
unladen: 'Пустой', // No cargo or fuel
|
||||
URL: 'Ссылка', // Link, Uniform Resource Locator
|
||||
WEP: 'ОРУДИЯ', // Abbreviation - Weapon recharge rate for power distributor
|
||||
WEP: 'ОРУЖ', // Abbreviation - Weapon recharge rate for power distributor
|
||||
yes: 'Да'
|
||||
};
|
||||
|
||||
@@ -446,8 +446,11 @@ export default class OutfittingPage extends Page {
|
||||
fuel = ship.fuelCapacity;
|
||||
}
|
||||
const code = this._fullCode(ship, fuel, cargo);
|
||||
// Only update the state if this really has been updated
|
||||
if (this.state.code != code || this.state.cargo != cargo || this.state.fuel != fuel) {
|
||||
this.setState({ code, cargo, fuel }, () => this._updateRoute(shipId, buildName, code));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current route based on build
|
||||
@@ -551,7 +554,7 @@ export default class OutfittingPage extends Page {
|
||||
const internalSlotMarker = `${ship.name}${_iStr}${_pStr}${_mStr}`;
|
||||
const hardpointsSlotMarker = `${ship.name}${_hStr}${_pStr}${_mStr}`;
|
||||
const boostMarker = `${ship.canBoost(cargo, fuel)}`;
|
||||
const shipSummaryMarker = `${ship.name}${_sStr}${_iStr}${_hStr}${_pStr}${_mStr}${ship.ladenMass}${ship.cargo}${ship.fuel}`;
|
||||
const shipSummaryMarker = `${ship.name}${_sStr}${_iStr}${_hStr}${_pStr}${_mStr}${ship.ladenMass}${cargo}${fuel}`;
|
||||
|
||||
return (
|
||||
<div id='outfit' className={'page'} style={{ fontSize: (sizeRatio * 0.9) + 'em' }}>
|
||||
@@ -588,10 +591,10 @@ export default class OutfittingPage extends Page {
|
||||
|
||||
{/* Main tables */}
|
||||
<ShipSummaryTable ship={ship} fuel={fuel} cargo={cargo} marker={shipSummaryMarker} />
|
||||
<StandardSlotSection ship={ship} fuel={fuel} cargo={cargo} code={standardSlotMarker} onChange={shipUpdated} currentMenu={menu} />
|
||||
<InternalSlotSection ship={ship} code={internalSlotMarker} onChange={shipUpdated} currentMenu={menu} />
|
||||
<HardpointSlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} currentMenu={menu} />
|
||||
<UtilitySlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} currentMenu={menu} />
|
||||
<StandardSlotSection ship={ship} fuel={fuel} cargo={cargo} code={standardSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||
<InternalSlotSection ship={ship} code={internalSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||
<HardpointSlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||
<UtilitySlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||
|
||||
{/* Control of ship and opponent */}
|
||||
<div className='group quarter'>
|
||||
|
||||
@@ -693,7 +693,7 @@ export default class Module {
|
||||
* @return {string} the shot speed for this module
|
||||
*/
|
||||
getShotSpeed() {
|
||||
if (this.blueprint && (this.blueprint.name === 'Focused' || this.blueprintname === 'Long Range')) {
|
||||
if (this.blueprint && (this.blueprint.name === 'Focused' || this.blueprint.name === 'Long range')) {
|
||||
// If the modification is focused or long range then the shot speed
|
||||
// uses the range modifier
|
||||
const rangemod = this.getModValue('range') / 10000;
|
||||
|
||||
@@ -132,6 +132,20 @@ export default class ModuleSet {
|
||||
return new Module({ template: pd });
|
||||
};
|
||||
|
||||
/** Find the power distributor that matches the requirements
|
||||
* @param {Object} requirements The requirements to be met (currently only support 'weprate')
|
||||
* @return {Object} Power distributor
|
||||
*/
|
||||
matchingPowerDist(requirements) {
|
||||
let pd = this.standard[4][0];
|
||||
for (let p of this.standard[4]) {
|
||||
if (p.weprate >= requirements.weprate || p.weprate >= pd.weprate) {
|
||||
pd = p;
|
||||
}
|
||||
}
|
||||
return new Module({ template: pd });
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the lightest Thruster that can handle the specified tonnage
|
||||
* @param {number} ladenMass Ship laden mass (mass + cargo + fuel)
|
||||
@@ -167,14 +181,15 @@ export default class ModuleSet {
|
||||
/**
|
||||
* Find the lightest Power Plant that provides sufficient power
|
||||
* @param {number} powerNeeded Power requirements in MJ
|
||||
* @param {string} rating The optional rating of the power plant
|
||||
* @return {Object} Power Plant
|
||||
*/
|
||||
lightestPowerPlant(powerNeeded) {
|
||||
lightestPowerPlant(powerNeeded, rating) {
|
||||
let pp = this.standard[0][0];
|
||||
|
||||
for (let p of this.standard[0]) {
|
||||
// Provides enough power, is lighter or the same mass as current power plant but better output/efficiency
|
||||
if (p.pgen >= powerNeeded && (p.mass < pp.mass || (p.mass == pp.mass && p.pgen > pp.pgen))) {
|
||||
if (p.pgen >= powerNeeded && (p.mass < pp.mass || (p.mass == pp.mass && p.pgen > pp.pgen)) && (!rating || rating == p.rating)) {
|
||||
pp = p;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ export default class Ship {
|
||||
* @return {Number} Pitch
|
||||
*/
|
||||
calcPitch(eng, fuel, cargo, boost) {
|
||||
return Calc.calcPitch(this.unladenMass + fuel + cargo, this.pitch, this.standard[1].m, this.pipSpeed, eng, this.topBoost / this.topSpeed, boost);
|
||||
return Calc.calcPitch(this.unladenMass + fuel + cargo, this.pitch, this.standard[1].m, this.pipSpeed, eng, this.boost / this.speed, boost);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -210,7 +210,7 @@ export default class Ship {
|
||||
* @return {Number} Roll
|
||||
*/
|
||||
calcRoll(eng, fuel, cargo, boost) {
|
||||
return Calc.calcRoll(this.unladenMass + fuel + cargo, this.roll, this.standard[1].m, this.pipSpeed, eng, this.topBoost / this.topSpeed, boost);
|
||||
return Calc.calcRoll(this.unladenMass + fuel + cargo, this.roll, this.standard[1].m, this.pipSpeed, eng, this.boost / this.speed, boost);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -222,7 +222,7 @@ export default class Ship {
|
||||
* @return {Number} Yaw
|
||||
*/
|
||||
calcYaw(eng, fuel, cargo, boost) {
|
||||
return Calc.calcYaw(this.unladenMass + fuel + cargo, this.yaw, this.standard[1].m, this.pipSpeed, eng, this.topBoost / this.topSpeed, boost);
|
||||
return Calc.calcYaw(this.unladenMass + fuel + cargo, this.yaw, this.standard[1].m, this.pipSpeed, eng, this.boost / this.speed, boost);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -435,6 +435,14 @@ export default class Ship {
|
||||
*/
|
||||
setModuleBlueprint(m, bp) {
|
||||
m.blueprint = bp;
|
||||
this.clearModifications(m);
|
||||
// Set any hidden items for the blueprint now
|
||||
const features = m.blueprint.grades[m.blueprint.grade].features;
|
||||
for (const featureName in features) {
|
||||
if (Modifications.modifications[featureName].hidden) {
|
||||
this.setModification(m, featureName, bp.grades[bp.grade].features[featureName][0]);
|
||||
}
|
||||
}
|
||||
this.updateModificationsString();
|
||||
}
|
||||
|
||||
|
||||
@@ -252,24 +252,6 @@ export function miner(ship, shielded) {
|
||||
}
|
||||
}
|
||||
|
||||
// Collector limpet controller if there are enough internals left
|
||||
let collectorLimpetsRequired = Math.max(ship.internal.filter(a => (!a.eligible) || a.eligible.cr).length - 6, 0);
|
||||
if (collectorLimpetsRequired > 0) {
|
||||
const collectorOrder = [1, 2, 3, 4, 5, 6, 7, 8];
|
||||
const collectorInternals = ship.internal.filter(a => usedSlots.indexOf(a) == -1)
|
||||
.filter(a => (!a.eligible) || a.eligible.cc)
|
||||
.sort((a,b) => collectorOrder.indexOf(a.maxClass) - collectorOrder.indexOf(b.maxClass));
|
||||
for (let i = 0; i < collectorInternals.length && collectorLimpetsRequired > 0; i++) {
|
||||
if (canMount(ship, collectorInternals[i], 'cc')) {
|
||||
// Collector only has odd classes
|
||||
const collectorClass = collectorInternals[i].maxClass % 2 === 0 ? collectorInternals[i].maxClass - 1 : collectorInternals[i].maxClass;
|
||||
ship.use(collectorInternals[i], ModuleUtils.findInternal('cc', collectorClass, 'A'));
|
||||
usedSlots.push(collectorInternals[i]);
|
||||
collectorLimpetsRequired -= collectorInternals[i].m.maximum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dual mining lasers of highest possible class; remove anything else
|
||||
const miningLaserOrder = [2, 3, 4, 1, 0];
|
||||
const miningLaserHardpoints = ship.hardpoints.concat().sort(function(a,b) {
|
||||
@@ -284,6 +266,44 @@ export function miner(ship, shielded) {
|
||||
}
|
||||
}
|
||||
|
||||
// Number of collector limpets required to be active is a function of the size of the ship and the power of the lasers
|
||||
const miningLaserDps = ship.hardpoints.filter(h => h.m != null)
|
||||
.reduce(function(a, b) {
|
||||
return a + b.m.getDps();
|
||||
}, 0);
|
||||
// Find out how many internal slots we have, and their potential cargo size
|
||||
const potentialCargo = ship.internal.filter(a => usedSlots.indexOf(a) == -1)
|
||||
.filter(a => (!a.eligible) || a.eligible.cr)
|
||||
.map(b => Math.pow(2, b.maxClass));
|
||||
// One collector for each 1.25 DPS, multiply by 1.25 for medium ships and 1.5 for large ships as they have further to travel
|
||||
// 0 if we only have 1 cargo slot, otherwise minium of 1 and maximum of 6 (excluding size modifier)
|
||||
const sizeModifier = ship.class == 2 ? 1.2 : ship.class == 3 ? 1.5 : 1;
|
||||
let collectorLimpetsRequired = potentialCargo.length == 1 ? 0 : Math.ceil(sizeModifier * Math.min(6, Math.floor(miningLaserDps / 1.25)));
|
||||
|
||||
if (collectorLimpetsRequired > 0) {
|
||||
const collectorOrder = [1, 2, 3, 4, 5, 6, 7, 8];
|
||||
const collectorInternals = ship.internal.filter(a => usedSlots.indexOf(a) == -1)
|
||||
.filter(a => (!a.eligible) || a.eligible.cc)
|
||||
.sort((a,b) => collectorOrder.indexOf(a.maxClass) - collectorOrder.indexOf(b.maxClass));
|
||||
// Always keep at least 2 slots free for cargo racks (1 for shielded)
|
||||
for (let i = 0; i < collectorInternals.length - (shielded ? 1 : 2) && collectorLimpetsRequired > 0; i++) {
|
||||
if (canMount(ship, collectorInternals[i], 'cc')) {
|
||||
// Collector only has odd classes
|
||||
const collectorClass = collectorInternals[i].maxClass % 2 === 0 ? collectorInternals[i].maxClass - 1 : collectorInternals[i].maxClass;
|
||||
ship.use(collectorInternals[i], ModuleUtils.findInternal('cc', collectorClass, 'D'));
|
||||
usedSlots.push(collectorInternals[i]);
|
||||
collectorLimpetsRequired -= collectorInternals[i].m.maximum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Power distributor to power the mining lasers indefinitely
|
||||
const wepRateRequired = ship.hardpoints.filter(h => h.m != null)
|
||||
.reduce(function(a, b) {
|
||||
return a + b.m.getEps();
|
||||
}, 0);
|
||||
standardOpts.pd = ship.getAvailableModules().matchingPowerDist({ weprate: wepRateRequired }).id;
|
||||
|
||||
// Fill the empty internals with cargo racks
|
||||
for (let i = ship.internal.length; i--;) {
|
||||
let slot = ship.internal[i];
|
||||
|
||||
@@ -64,6 +64,7 @@ export function blueprintTooltip(translate, blueprint, engineers, grp, m) {
|
||||
for (const feature in m.mods) {
|
||||
if (!blueprint.features[feature]) {
|
||||
const featureDef = Modifications.modifications[feature];
|
||||
if (featureDef && !featureDef.hidden) {
|
||||
let symbol = '';
|
||||
if (feature === 'jitter') {
|
||||
symbol = '°';
|
||||
@@ -87,12 +88,14 @@ export function blueprintTooltip(translate, blueprint, engineers, grp, m) {
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We also add in any benefits from specials that aren't covered above
|
||||
if (m.blueprint && m.blueprint.special) {
|
||||
for (const feature in Modifications.modifierActions[m.blueprint.special.edname]) {
|
||||
if (!blueprint.features[feature] && !m.mods.feature) {
|
||||
const featureDef = Modifications.modifications[feature];
|
||||
if (featureDef && !featureDef.hidden) {
|
||||
let symbol = '';
|
||||
if (feature === 'jitter') {
|
||||
symbol = '°';
|
||||
@@ -118,6 +121,8 @@ export function blueprintTooltip(translate, blueprint, engineers, grp, m) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let components;
|
||||
if (!m) {
|
||||
components = [];
|
||||
|
||||
@@ -36,6 +36,23 @@
|
||||
</script>
|
||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||
<% } %>
|
||||
|
||||
<!-- Piwik -->
|
||||
<script type="text/javascript">
|
||||
var _paq = _paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(["setCookieDomain", "*.coriolis.edcd.io"]);
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//stats.isadankme.me/";
|
||||
_paq.push(['setTrackerUrl', u+'piwik.php']);
|
||||
_paq.push(['setSiteId', '4']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Piwik Code -->
|
||||
</head>
|
||||
<body style="background-color:#000;">
|
||||
<section id="coriolis"></section>
|
||||
|
||||
@@ -24,51 +24,61 @@
|
||||
|
||||
.fg {
|
||||
color: @fg;
|
||||
stroke: @fg;
|
||||
fill: @fg;
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: @muted;
|
||||
stroke: @muted;
|
||||
fill: @muted;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
color: @disabled;
|
||||
stroke: @disabled;
|
||||
fill: @disabled;
|
||||
}
|
||||
|
||||
.primary {
|
||||
color: @primary;
|
||||
stroke: @primary;
|
||||
fill: @primary;
|
||||
}
|
||||
|
||||
.primary-bg {
|
||||
color: @primary-bg;
|
||||
stroke: @primary-bg;
|
||||
fill: @primary-bg;
|
||||
}
|
||||
|
||||
.primary-disabled {
|
||||
color: @primary-disabled;
|
||||
stroke: @primary-disabled;
|
||||
fill: @primary-disabled;
|
||||
}
|
||||
|
||||
.secondary {
|
||||
color: @secondary;
|
||||
stroke: @secondary;
|
||||
fill: @secondary;
|
||||
}
|
||||
|
||||
.secondary-disabled {
|
||||
color: @secondary-disabled;
|
||||
stroke: @secondary-disabled;
|
||||
fill: @secondary-disabled;
|
||||
}
|
||||
|
||||
.warning {
|
||||
color: @warning;
|
||||
stroke: @warning;
|
||||
fill: @warning;
|
||||
}
|
||||
|
||||
.warning-disabled {
|
||||
color: @warning-disabled;
|
||||
stroke: @warning-disabled;
|
||||
fill: @warning-disabled;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,13 +27,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Modifiction icons - hard-code stroke/fill
|
||||
// Modifiction icons - hard-code fill
|
||||
.modicon {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 1.1em;
|
||||
height: 1em;
|
||||
stoke: @fg;
|
||||
stroke-width: 20;
|
||||
fill: transparent;
|
||||
|
||||
@@ -61,6 +60,9 @@
|
||||
|
||||
.summary {
|
||||
stroke: @fg;
|
||||
stroke-width: 10;
|
||||
fill: @fg;
|
||||
|
||||
svg {
|
||||
stroke-width: 10;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,6 @@ select {
|
||||
cursor: pointer;
|
||||
line-height:@optionSpacing;
|
||||
color: @primary-disabled;
|
||||
stroke-width: 0.5em;
|
||||
stroke: @primary-disabled;
|
||||
|
||||
.no-touch &:hover {
|
||||
@@ -96,6 +95,10 @@ select {
|
||||
color: @primary;
|
||||
stroke: @primary;
|
||||
}
|
||||
|
||||
svg {
|
||||
stroke-width: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.lc, .c {
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
border: 1px solid @primary-disabled;
|
||||
color: @fg;
|
||||
stroke: @fg;
|
||||
stroke-width: 20;
|
||||
fill: @fg;
|
||||
|
||||
.details-container {
|
||||
@@ -57,11 +56,13 @@
|
||||
width: 1.2em;
|
||||
color: @primary-disabled;
|
||||
stroke: @primary-disabled;
|
||||
stroke-width: 20;
|
||||
border-right: 1px solid @primary-disabled;
|
||||
box-sizing: border-box;
|
||||
padding-top: 0.2em;
|
||||
padding-left: 0.05em;
|
||||
svg {
|
||||
stroke-width: 20;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
@@ -69,16 +70,17 @@
|
||||
font-size: 1.3em;
|
||||
color: lighten(@primary-bg, 12%);
|
||||
stroke: lighten(@primary-bg, 12%);
|
||||
stroke-width: 20;
|
||||
text-align: center;
|
||||
letter-spacing: 0.1em;
|
||||
line-height: 1.7em;
|
||||
svg {
|
||||
stroke-width: 20;
|
||||
}
|
||||
}
|
||||
|
||||
&.selected {
|
||||
color: @primary-bg;
|
||||
stroke: @primary-bg;
|
||||
stroke-width: 20;
|
||||
fill: @primary-bg;
|
||||
background-color: @primary;
|
||||
border: 1px solid @primary;
|
||||
@@ -86,13 +88,18 @@
|
||||
.sz {
|
||||
color: @primary;
|
||||
stroke: @primary;
|
||||
stroke-width: 20;
|
||||
background-color: @primary-bg;
|
||||
border-right: 1px solid @primary;
|
||||
svg {
|
||||
stroke-width: 20;
|
||||
}
|
||||
}
|
||||
.details {
|
||||
background-color: transparent;
|
||||
}
|
||||
svg {
|
||||
stroke-width: 20;
|
||||
}
|
||||
}
|
||||
|
||||
&.eligible {
|
||||
@@ -144,4 +151,8 @@
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
stroke-width: 20;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user