poi-plugin-leveling-plan 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icon/75.png +0 -0
- package/assets/icon/77.png +0 -0
- package/assets/icon/78.png +0 -0
- package/assets/icon/94.png +0 -0
- package/assets/icon/useitem.svg +107 -0
- package/assets/kaisou_materials.json +4881 -0
- package/assets/main.css +265 -1
- package/i18n/en-US.json +8 -1
- package/i18n/ja-JP.json +8 -1
- package/i18n/zh-CN.json +8 -1
- package/i18n/zh-TW.json +8 -1
- package/index.js +21 -1
- package/package.json +1 -1
- package/services/battle-observer.js +59 -0
- package/utils/kaisou-cost.js +269 -0
- package/views/components/map-selector.js +119 -85
- package/views/components/plan-form.js +31 -1
- package/views/components/plan-item.js +101 -6
- package/views/components/plan-list.js +29 -12
- package/views/components/plan-settings.js +54 -5
- package/views/components/useitem-icon.js +87 -0
|
@@ -9,11 +9,13 @@ var _reactBootstrap = require("react-bootstrap");
|
|
|
9
9
|
|
|
10
10
|
var _reactRedux = require("react-redux");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
14
|
var _planItem = _interopRequireDefault(require("./plan-item"));
|
|
15
15
|
|
|
16
|
-
var _selectors = require("
|
|
16
|
+
var _selectors = require("views/utils/selectors");
|
|
17
|
+
|
|
18
|
+
var _selectors2 = require("../../utils/selectors");
|
|
17
19
|
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
|
|
@@ -52,7 +54,11 @@ class PlanList extends _react.Component {
|
|
|
52
54
|
completedPlans,
|
|
53
55
|
onEdit,
|
|
54
56
|
onDelete,
|
|
55
|
-
onComplete
|
|
57
|
+
onComplete,
|
|
58
|
+
$ships,
|
|
59
|
+
resources,
|
|
60
|
+
useitems,
|
|
61
|
+
$useitems
|
|
56
62
|
} = this.props; // 根据当前标签页选择要显示的计划
|
|
57
63
|
|
|
58
64
|
let displayPlans = [];
|
|
@@ -86,18 +92,29 @@ class PlanList extends _react.Component {
|
|
|
86
92
|
planDetail: plan,
|
|
87
93
|
onEdit: () => onEdit(plan.id),
|
|
88
94
|
onDelete: () => onDelete(plan.id),
|
|
89
|
-
onComplete: () => onComplete(plan.id)
|
|
95
|
+
onComplete: () => onComplete(plan.id),
|
|
96
|
+
$ships: $ships,
|
|
97
|
+
resources: resources,
|
|
98
|
+
useitems: useitems,
|
|
99
|
+
$useitems: $useitems
|
|
90
100
|
}))));
|
|
91
101
|
}
|
|
92
102
|
|
|
93
|
-
} // Redux
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const mapStateToProps =
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
} // Redux 连接(不处理equips,避免大量计算)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
const mapStateToProps = state => {
|
|
107
|
+
const $const = (0, _selectors.constSelector)(state) || {};
|
|
108
|
+
return {
|
|
109
|
+
allPlans: (0, _selectors2.allPlanDetailsSelector)(state),
|
|
110
|
+
activePlans: (0, _selectors2.activePlanDetailsSelector)(state),
|
|
111
|
+
completedPlans: (0, _selectors2.completedPlanDetailsSelector)(state),
|
|
112
|
+
$ships: (0, _selectors2.$shipsSelector)(state),
|
|
113
|
+
resources: _lodash.default.get(state, 'info.resources', []),
|
|
114
|
+
useitems: _lodash.default.get(state, 'info.useitems', {}),
|
|
115
|
+
$useitems: _lodash.default.get($const, '$useitems', {})
|
|
116
|
+
};
|
|
117
|
+
};
|
|
101
118
|
|
|
102
119
|
var _default = (0, _reactRedux.connect)(mapStateToProps)(PlanList);
|
|
103
120
|
|
|
@@ -15,11 +15,52 @@ var _selectors = require("../../utils/selectors");
|
|
|
15
15
|
|
|
16
16
|
var _constants = require("../../utils/constants");
|
|
17
17
|
|
|
18
|
+
var _expCalculator = require("../../utils/exp-calculator");
|
|
19
|
+
|
|
20
|
+
var _planHelpers = require("../../utils/plan-helpers");
|
|
21
|
+
|
|
18
22
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
|
19
23
|
|
|
20
24
|
const {
|
|
21
25
|
__
|
|
22
|
-
} = window.i18n['poi-plugin-leveling-plan'];
|
|
26
|
+
} = window.i18n['poi-plugin-leveling-plan'];
|
|
27
|
+
|
|
28
|
+
const MapExperienceOverview = ({
|
|
29
|
+
personalStats
|
|
30
|
+
}) => {
|
|
31
|
+
const mapIds = Object.keys(_constants.EXP_BY_POI_DB).sort((a, b) => Number(a) - Number(b));
|
|
32
|
+
return _react.default.createElement("div", {
|
|
33
|
+
className: "map-exp-table-container"
|
|
34
|
+
}, _react.default.createElement("table", {
|
|
35
|
+
className: "map-exp-table"
|
|
36
|
+
}, _react.default.createElement("thead", null, _react.default.createElement("tr", null, _react.default.createElement("th", null, __('Map')), _react.default.createElement("th", null, __('Preset Value')), _react.default.createElement("th", null, __('Personal Value')), _react.default.createElement("th", null, __('Sample Count')), _react.default.createElement("th", null, __('Currently Used')))), _react.default.createElement("tbody", null, mapIds.map(mapId => {
|
|
37
|
+
const mapExpData = (0, _expCalculator.getMapExp)(mapId, personalStats, 30);
|
|
38
|
+
const presetExp = _constants.EXP_BY_POI_DB[mapId] || 0;
|
|
39
|
+
const isPersonal = mapExpData.source === 'personal';
|
|
40
|
+
const hasPersonalData = mapExpData.count > 0;
|
|
41
|
+
const samplesInsufficient = hasPersonalData && !isPersonal;
|
|
42
|
+
return _react.default.createElement("tr", {
|
|
43
|
+
key: mapId
|
|
44
|
+
}, _react.default.createElement("td", {
|
|
45
|
+
className: "map-id"
|
|
46
|
+
}, (0, _planHelpers.formatMapName)(mapId)), _react.default.createElement("td", {
|
|
47
|
+
className: "preset-exp"
|
|
48
|
+
}, presetExp), _react.default.createElement("td", {
|
|
49
|
+
className: `personal-exp ${isPersonal ? 'active' : ''}`
|
|
50
|
+
}, hasPersonalData ? mapExpData.exp : __('No personal data')), _react.default.createElement("td", {
|
|
51
|
+
className: `sample-count ${samplesInsufficient ? 'insufficient' : ''}`
|
|
52
|
+
}, mapExpData.count, samplesInsufficient && _react.default.createElement("span", {
|
|
53
|
+
className: "insufficient-note"
|
|
54
|
+
}, " (", __('Samples Insufficient'), ")")), _react.default.createElement("td", {
|
|
55
|
+
className: "current-source"
|
|
56
|
+
}, isPersonal ? _react.default.createElement("span", {
|
|
57
|
+
className: "source-badge personal"
|
|
58
|
+
}, __('Personal'), " \u2605") : _react.default.createElement("span", {
|
|
59
|
+
className: "source-badge preset"
|
|
60
|
+
}, __('Preset'))));
|
|
61
|
+
}))));
|
|
62
|
+
}; // 计划设置组件
|
|
63
|
+
|
|
23
64
|
|
|
24
65
|
class PlanSettings extends _react.Component {
|
|
25
66
|
constructor(props) {
|
|
@@ -102,7 +143,10 @@ class PlanSettings extends _react.Component {
|
|
|
102
143
|
defaultIsFlagship,
|
|
103
144
|
defaultIsMVP
|
|
104
145
|
} = this.state;
|
|
105
|
-
|
|
146
|
+
const {
|
|
147
|
+
personalStats
|
|
148
|
+
} = this.props;
|
|
149
|
+
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_reactBootstrap.Panel, {
|
|
106
150
|
className: "plan-settings"
|
|
107
151
|
}, _react.default.createElement(_reactBootstrap.Panel.Heading, null, _react.default.createElement(_reactBootstrap.Panel.Title, null, __('Default Battle Conditions'))), _react.default.createElement(_reactBootstrap.Panel.Body, null, _react.default.createElement("p", {
|
|
108
152
|
className: "help-block"
|
|
@@ -132,14 +176,19 @@ class PlanSettings extends _react.Component {
|
|
|
132
176
|
}, __('Reset to Default')), _react.default.createElement(_reactBootstrap.Button, {
|
|
133
177
|
bsStyle: "primary",
|
|
134
178
|
onClick: this.handleSave
|
|
135
|
-
}, __('Save Settings')))))
|
|
179
|
+
}, __('Save Settings'))))), _react.default.createElement(_reactBootstrap.Panel, {
|
|
180
|
+
className: "map-exp-overview-panel"
|
|
181
|
+
}, _react.default.createElement(_reactBootstrap.Panel.Heading, null, _react.default.createElement(_reactBootstrap.Panel.Title, null, __('Map Experience Overview'))), _react.default.createElement(_reactBootstrap.Panel.Body, null, _react.default.createElement(MapExperienceOverview, {
|
|
182
|
+
personalStats: personalStats
|
|
183
|
+
}))));
|
|
136
184
|
}
|
|
137
185
|
|
|
138
186
|
} // Redux 连接
|
|
139
187
|
|
|
140
188
|
|
|
141
|
-
const mapStateToProps = (0, _reselect.createSelector)([_selectors.planSettingsSelector], settings => ({
|
|
142
|
-
settings
|
|
189
|
+
const mapStateToProps = (0, _reselect.createSelector)([_selectors.planSettingsSelector, _selectors.personalStatsSelector], (settings, personalStats) => ({
|
|
190
|
+
settings,
|
|
191
|
+
personalStats
|
|
143
192
|
}));
|
|
144
193
|
|
|
145
194
|
var _default = (0, _reactRedux.connect)(mapStateToProps)(PlanSettings);
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.UseitemIcon = void 0;
|
|
5
|
+
|
|
6
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
7
|
+
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _path = require("path");
|
|
13
|
+
|
|
14
|
+
var _reactRedux = require("react-redux");
|
|
15
|
+
|
|
16
|
+
var _selectors = require("views/utils/selectors");
|
|
17
|
+
|
|
18
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
const fallback = (0, _path.resolve)(__dirname, '../../assets/icon/useitem.svg'); // 有图标文件的 useitem id 集合(75/77/78/94 命名正确,其余 fallback)
|
|
25
|
+
|
|
26
|
+
const AVAILABLE_ICONS = new Set([75, 77, 78, 94]);
|
|
27
|
+
|
|
28
|
+
class StaticUseitemIcon extends _react.Component {
|
|
29
|
+
constructor(...args) {
|
|
30
|
+
var _temp;
|
|
31
|
+
|
|
32
|
+
return _temp = super(...args), Object.defineProperty(this, "shouldComponentUpdate", {
|
|
33
|
+
configurable: true,
|
|
34
|
+
enumerable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: nextProps => !_lodash.default.isEqual(nextProps, this.props)
|
|
37
|
+
}), _temp;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
render() {
|
|
41
|
+
const {
|
|
42
|
+
useitemId,
|
|
43
|
+
className,
|
|
44
|
+
useSVGIcon
|
|
45
|
+
} = this.props;
|
|
46
|
+
const classNames = (0, _classnames.default)(useSVGIcon ? 'svg' : 'png', className);
|
|
47
|
+
let _src = fallback;
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
if (AVAILABLE_ICONS.has(useitemId)) {
|
|
51
|
+
_src = (0, _path.resolve)(__dirname, `../../assets/icon/${useitemId}.png`);
|
|
52
|
+
}
|
|
53
|
+
} catch (e) {
|
|
54
|
+
_src = fallback;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return _react.default.createElement("img", {
|
|
58
|
+
src: _src,
|
|
59
|
+
alt: `useitem #${useitemId}`,
|
|
60
|
+
className: (0, _classnames.default)(classNames, 'useitem-icon')
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
Object.defineProperty(StaticUseitemIcon, "propTypes", {
|
|
67
|
+
configurable: true,
|
|
68
|
+
enumerable: true,
|
|
69
|
+
writable: true,
|
|
70
|
+
value: {
|
|
71
|
+
useitemId: _propTypes.default.number.isRequired,
|
|
72
|
+
className: _propTypes.default.string,
|
|
73
|
+
useSVGIcon: _propTypes.default.bool.isRequired
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
Object.defineProperty(StaticUseitemIcon, "defaultProps", {
|
|
77
|
+
configurable: true,
|
|
78
|
+
enumerable: true,
|
|
79
|
+
writable: true,
|
|
80
|
+
value: {
|
|
81
|
+
className: ''
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
const UseitemIcon = (0, _reactRedux.connect)(state => ({
|
|
85
|
+
useSVGIcon: _lodash.default.get((0, _selectors.configSelector)(state), 'poi.useSVGIcon')
|
|
86
|
+
}))(StaticUseitemIcon);
|
|
87
|
+
exports.UseitemIcon = UseitemIcon;
|