-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings_migrator.js
146 lines (145 loc) · 9.17 KB
/
settings_migrator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
const DefaultSettings = {
"enabled": true,
"alerted": true, // Pop-up notification
"notice": true, // Pop-up notification
"party": false, // Party notification
"messager": true, // Message
"marker": true, // Lootbeam
"itemId": 98260, // Vergo's Head
"bosses": [
{huntingZoneId: 10, templateId: 99, name: "(Serpentis Isle)Divine Reaver"},
{huntingZoneId: 4, templateId: 5011, name: "(Fyrmount)Tempest Kanash"},
{huntingZoneId: 38, templateId: 35, name: "(Sienna Canyon)Nyxarras"},
{huntingZoneId: 57, templateId: 33, name: "(Amena Quatla)Betsael"},
{huntingZoneId: 51, templateId: 7011, name: "(Vale of Spires)Linyphi"},
{huntingZoneId: 52, templateId: 9050, name: "(Plain of the Damned)Yunaras Snaggletooth"},
{huntingZoneId: 1023, templateId: 3000, name: "(Event)Dakuryon's Shade"},
{huntingZoneId: 1023, templateId: 20150805, name: "(Event)Dakuryon's Shade"},
{huntingZoneId: 1023, templateId: 88888888, name: "(Event)Big Blue Box"},
{huntingZoneId: 1023, templateId: 88888889, name: "(Event)Big Blue Box"},
{huntingZoneId: 1023, templateId: 160341, name: "(Event)Phoney Santa"},
{huntingZoneId: 1023, templateId: 99999997, name: "(Event)Fat Santa"},
{huntingZoneId: 1023, templateId: 99999998, name: "(Event)Tiny Santa"},
{huntingZoneId: 1023, templateId: 99999991, name: "(Event)Caiman Egg Thief"},
{huntingZoneId: 1023, templateId: 99999992, name: "(Event)Caiman Egg Thief"},
{huntingZoneId: 1023, templateId: 99999999, name: "(Event)Caiman Egg Thief"},
{huntingZoneId: 183, templateId: 6002, name: "(Event)AirDrop"},
/* ==== 亚伦南部 ======================================================================================== */
{huntingZoneId: 2, templateId: 1271, name: "Arcun"},
{huntingZoneId: 3, templateId: 1271, name: "Arcun"},
{huntingZoneId: 5, templateId: 1271, name: "Arcun"},
{huntingZoneId: 6, templateId: 1271, name: "Arcun"},
{huntingZoneId: 7, templateId: 1271, name: "Arcun"},
{huntingZoneId: 4, templateId: 1271, name: "Eteral"},
{huntingZoneId: 9, templateId: 1271, name: "Eteral"},
{huntingZoneId: 10, templateId: 1271, name: "Eteral"},
{huntingZoneId: 11, templateId: 1271, name: "Eteral"},
{huntingZoneId: 12, templateId: 1271, name: "Eteral"},
{huntingZoneId: 15, templateId: 1271, name: "Foretta"},
{huntingZoneId: 16, templateId: 1271, name: "Foretta"},
{huntingZoneId: 17, templateId: 1271, name: "Foretta"},
{huntingZoneId: 23, templateId: 1271, name: "Foretta"},
{huntingZoneId: 18, templateId: 1271, name: "Viadu"},
{huntingZoneId: 19, templateId: 1271, name: "Viadu"},
{huntingZoneId: 21, templateId: 1271, name: "Viadu"},
{huntingZoneId: 24, templateId: 1271, name: "Viadu"},
/* ==== 夏拉南部 ======================================================================================== */
{huntingZoneId: 26, templateId: 1271, name: "Ezart"},
{huntingZoneId: 27, templateId: 1271, name: "Ezart"},
{huntingZoneId: 28, templateId: 1271, name: "Ezart"},
{huntingZoneId: 29, templateId: 1271, name: "Ezart"},
{huntingZoneId: 30, templateId: 1271, name: "Versa"},
{huntingZoneId: 31, templateId: 1271, name: "Storan"},
{huntingZoneId: 32, templateId: 1271, name: "Storan"},
{huntingZoneId: 34, templateId: 1271, name: "Storan"},
{huntingZoneId: 35, templateId: 1271, name: "Viace"},
{huntingZoneId: 36, templateId: 1271, name: "Viace"},
{huntingZoneId: 38, templateId: 1271, name: "Viace"},
{huntingZoneId: 40, templateId: 1271, name: "Vaneva"},
{huntingZoneId: 41, templateId: 1271, name: "Vaneva"},
/* ==== 夏拉北部 ======================================================================================== */
{huntingZoneId: 45, templateId: 1271, name: "Lotica"},
{huntingZoneId: 47, templateId: 1271, name: "Lotica"},
{huntingZoneId: 48, templateId: 1271, name: "Hecurn"},
{huntingZoneId: 49, templateId: 1271, name: "Locarnum"},
{huntingZoneId: 50, templateId: 1271, name: "Locarnum"},
{huntingZoneId: 51, templateId: 1271, name: "Loahcun"},
{huntingZoneId: 52, templateId: 1271, name: "Loahcun"},
{huntingZoneId: 54, templateId: 1271, name: "Silvette"},
{huntingZoneId: 55, templateId: 1271, name: "Silvette"},
{huntingZoneId: 56, templateId: 1271, name: "Silvette"},
{huntingZoneId: 57, templateId: 1271, name: "Silvette"},
/* ===== 亚伦北部 ======================================================================================= */
{huntingZoneId: 172, templateId: 1271, name: "Varrek"},
{huntingZoneId: 181, templateId: 1271, name: "Varrek"},
{huntingZoneId: 182, templateId: 1271, name: "Varrek"},
{huntingZoneId: 183, templateId: 1278, name: "Varrek"},
{huntingZoneId: 191, templateId: 1271, name: "Varrek"},
/* ==== 保護領地 ======================================================================================== */
{huntingZoneId: 13, templateId: 1271, name: "Vardung"},
/* ==== 直辖領地 ======================================================================================== */
{huntingZoneId: 63, templateId: 1278, name: "Veracun"},
{huntingZoneId: 72, templateId: 1278, name: "Alluman"},
{huntingZoneId: 84, templateId: 1278, name: "Kaidera"},
/* ==== 神秘商店 ======================================================================================== */
{huntingZoneId: 63, templateId: 1271, name: "Petam"},
{huntingZoneId: 63, templateId: 1279, name: "Petam"},
{huntingZoneId: 72, templateId: 1271, name: "Hemusk"},
{huntingZoneId: 84, templateId: 1271, name: "Kaylight"},
{huntingZoneId: 183, templateId: 1271, name: "Jondo"},
/* ==== 交付哥布林 ====================================================================================== */
{huntingZoneId: 63, templateId: 1276, logTime: 0, name: "Starc"},
{huntingZoneId: 63, templateId: 1284, name: "Starc"},
{huntingZoneId: 84, templateId: 1276, logTime: 0, name: "Starc"},
{huntingZoneId: 72, templateId: 1276, logTime: 0, name: "Starc"},
{huntingZoneId: 183, templateId: 1276, logTime: 0, name: "Starc"},
/* ==== 世界BOSS ======================================================================================== */
{huntingZoneId: 26, templateId: 5001, logTime: 0, name: "Ortan"},
{huntingZoneId: 39, templateId: 501, logTime: 0, name: "Hazard"},
{huntingZoneId: 51, templateId: 4001, logTime: 0, name: "Cerrus"},
/* ==== 空岛稀有 ======================================================================================== */
{huntingZoneId: 2020, templateId: 1100, name: "Supreme Draakon Pursuer"},
{huntingZoneId: 2020, templateId: 1101, name: "Draakon Guard-Captain"},
{huntingZoneId: 2020, templateId: 1102, name: "Supreme Draakon Dominator"},
{huntingZoneId: 2020, templateId: 1200, name: "Elite Naga Priest"},
{huntingZoneId: 2020, templateId: 1201, name: "Elite Naga Knight"},
{huntingZoneId: 2020, templateId: 1202, name: "Elite Naga Executioner"},
{huntingZoneId: 2020, templateId: 1300, name: "Manuk"},
{huntingZoneId: 2020, templateId: 1400, name: "Axcellob"},
{huntingZoneId: 2020, templateId: 1500, name: "Zemces"},
{huntingZoneId: 2020, templateId: 1600, name: "Red-Flecked Crab"},
{huntingZoneId: 2020, templateId: 1601, name: "Thorny Eyestalker"},
{huntingZoneId: 2020, templateId: 1700, name: "Vekes"}
]
};
module.exports = function MigrateSettings(from_ver, to_ver, settings) {
if (from_ver === undefined) {
// Migrate legacy config file
return Object.assign(Object.assign({}, DefaultSettings), settings);
} else if (from_ver === null) {
// No config file exists, use default settings
return DefaultSettings;
} else {
// Migrate from older version (using the new system) to latest one
if (from_ver + 1 < to_ver) { // Recursively upgrade in one-version steps
settings = MigrateSettings(from_ver, from_ver + 1, settings);
return MigrateSettings(from_ver + 1, to_ver, settings);
}
// If we reach this point it's guaranteed that from_ver === to_ver - 1, so we can implement
// a switch for each version step that upgrades to the next version. This enables us to
// upgrade from any version to the latest version without additional effort!
switch (to_ver) {
default:
let oldsettings = settings
settings = Object.assign(DefaultSettings, {});
for (let option in oldsettings) {
if (option == "bosses") continue
if (settings[option]) {
settings[option] = oldsettings[option]
}
}
break;
}
return settings;
}
}