@malib/gear 0.0.1 → 0.1.0
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/index.cjs +2 -2
- package/index.d.ts +3 -1
- package/index.js +412 -816
- package/lib/gear.d.ts +26 -57
- package/lib/gearoption.d.ts +19 -0
- package/lib/gearproptype.d.ts +80 -105
- package/lib/gearreq.d.ts +19 -0
- package/lib/logic/enhancement.d.ts +10 -10
- package/lib/logic/scroll.d.ts +8 -2
- package/lib/logic/soul.d.ts +41 -0
- package/lib/logic/upgrade.d.ts +12 -11
- package/lib/potentialgrade.d.ts +18 -0
- package/lib/soul.d.ts +18 -261
- package/package.json +1 -1
- package/lib/soultype.d.ts +0 -22
package/index.js
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
class q {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.level = 0, this.str = 0, this.luk = 0, this.dex = 0, this.int = 0, this.job = 0, this.specJob = 0;
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
class K {
|
|
1
|
+
class I {
|
|
8
2
|
constructor() {
|
|
9
3
|
this.base = 0, this.bonus = 0, this.upgrade = 0, this.enchant = 0;
|
|
10
4
|
}
|
|
@@ -21,9 +15,42 @@ class K {
|
|
|
21
15
|
return this.bonus + this.upgrade + this.enchant;
|
|
22
16
|
}
|
|
23
17
|
}
|
|
24
|
-
|
|
18
|
+
var n = /* @__PURE__ */ ((t) => (t[t.incSTR = 1] = "incSTR", t[t.incSTRr = 2] = "incSTRr", t[t.incDEX = 3] = "incDEX", t[t.incDEXr = 4] = "incDEXr", t[t.incINT = 5] = "incINT", t[t.incINTr = 6] = "incINTr", t[t.incLUK = 7] = "incLUK", t[t.incLUKr = 8] = "incLUKr", t[t.incAllStat = 9] = "incAllStat", t[t.incMHP = 10] = "incMHP", t[t.incMMP = 11] = "incMMP", t[t.incMHPr = 12] = "incMHPr", t[t.incMMPr = 13] = "incMMPr", t[t.incMDF = 14] = "incMDF", t[t.incARC = 15] = "incARC", t[t.incAUT = 16] = "incAUT", t[t.incPAD = 17] = "incPAD", t[t.incMAD = 18] = "incMAD", t[t.incAD = 19] = "incAD", t[t.incPDD = 20] = "incPDD", t[t.incSpeed = 21] = "incSpeed", t[t.incJump = 22] = "incJump", t[t.knockback = 23] = "knockback", t[t.bdR = 24] = "bdR", t[t.incBDR = 25] = "incBDR", t[t.imdR = 26] = "imdR", t[t.incIMDR = 27] = "incIMDR", t[t.damR = 28] = "damR", t[t.nbdR = 29] = "nbdR", t[t.statR = 30] = "statR", t[t.incCHUC = 31] = "incCHUC", t[t.incPADr = 100] = "incPADr", t[t.incMADr = 101] = "incMADr", t[t.incPDDr = 102] = "incPDDr", t[t.incCr = 103] = "incCr", t[t.incDAMr = 104] = "incDAMr", t[t.RecoveryHP = 105] = "RecoveryHP", t[t.RecoveryMP = 106] = "RecoveryMP", t[t.face = 107] = "face", t[t.prop = 108] = "prop", t[t.time = 109] = "time", t[t.HP = 110] = "HP", t[t.MP = 111] = "MP", t[t.attackType = 112] = "attackType", t[t.ignoreTargetDEF = 113] = "ignoreTargetDEF", t[t.ignoreDAM = 114] = "ignoreDAM", t[t.ignoreDAMr = 115] = "ignoreDAMr", t[t.DAMreflect = 116] = "DAMreflect", t[t.mpconReduce = 117] = "mpconReduce", t[t.incMesoProp = 118] = "incMesoProp", t[t.incRewardProp = 119] = "incRewardProp", t[t.incAllskill = 120] = "incAllskill", t[t.RecoveryUP = 121] = "RecoveryUP", t[t.boss = 122] = "boss", t[t.level = 123] = "level", t[t.incTerR = 124] = "incTerR", t[t.incAsrR = 125] = "incAsrR", t[t.incEXPr = 126] = "incEXPr", t[t.reduceCooltime = 127] = "reduceCooltime", t[t.incSTRlv = 128] = "incSTRlv", t[t.incDEXlv = 129] = "incDEXlv", t[t.incINTlv = 130] = "incINTlv", t[t.incLUKlv = 131] = "incLUKlv", t[t.incMHPlv = 132] = "incMHPlv", t[t.incPADlv = 133] = "incPADlv", t[t.incMADlv = 134] = "incMADlv", t[t.incCriticaldamage = 135] = "incCriticaldamage", t[t.attackSpeed = 200] = "attackSpeed", t[t.setItemID = 201] = "setItemID", t[t.durability = 202] = "durability", t[t.reduceReq = 203] = "reduceReq", t[t.only = 1100] = "only", t[t.tradeBlock = 1101] = "tradeBlock", t[t.accountSharable = 1102] = "accountSharable", t[t.onlyEquip = 1103] = "onlyEquip", t[t.tradeAvailable = 1104] = "tradeAvailable", t[t.equipTradeBlock = 1105] = "equipTradeBlock", t[t.sharableOnce = 1106] = "sharableOnce", t[t.charismaEXP = 1107] = "charismaEXP", t[t.senseEXP = 1108] = "senseEXP", t[t.insightEXP = 1109] = "insightEXP", t[t.willEXP = 1110] = "willEXP", t[t.craftEXP = 1111] = "craftEXP", t[t.charmEXP = 1112] = "charmEXP", t[t.accountShareTag = 1113] = "accountShareTag", t[t.bossReward = 1114] = "bossReward", t[t.noPotential = 1115] = "noPotential", t[t.fixedPotential = 1116] = "fixedPotential", t[t.specialGrade = 1117] = "specialGrade", t[t.fixedGrade = 1118] = "fixedGrade", t[t.superiorEqp = 1119] = "superiorEqp", t[t.incPQEXPr = 1120] = "incPQEXPr", t[t.jokerToSetItem = 1121] = "jokerToSetItem", t[t.blockGoldHammer = 1122] = "blockGoldHammer", t[t.exceptUpgrade = 1123] = "exceptUpgrade", t[t.onlyUpgrade = 1124] = "onlyUpgrade", t[t.noLookChange = 1125] = "noLookChange", t[t.tucIgnoreForPotential = 1126] = "tucIgnoreForPotential", t))(n || {});
|
|
19
|
+
class K {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.level = 0, this.str = 0, this.luk = 0, this.dex = 0, this.int = 0, this.job = 0, this.specJob = 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
var i = /* @__PURE__ */ ((t) => (t[t.cap = 100] = "cap", t[t.faceAccessory = 101] = "faceAccessory", t[t.eyeAccessory = 102] = "eyeAccessory", t[t.earrings = 103] = "earrings", t[t.coat = 104] = "coat", t[t.longcoat = 105] = "longcoat", t[t.pants = 106] = "pants", t[t.shoes = 107] = "shoes", t[t.glove = 108] = "glove", t[t.cape = 110] = "cape", t[t.ring = 111] = "ring", t[t.pendant = 112] = "pendant", t[t.belt = 113] = "belt", t[t.medal = 114] = "medal", t[t.shoulder = 115] = "shoulder", t[t.pocket = 116] = "pocket", t[t.badge = 118] = "badge", t[t.android = 166] = "android", t[t.machineHeart = 167] = "machineHeart", t[t.shield = 109] = "shield", t[t.emblem = 119] = "emblem", t[t.powerSource = 119020] = "powerSource", t[t.shiningRod = 1212] = "shiningRod", t[t.tuner = 1213] = "tuner", t[t.breathShooter = 1214] = "breathShooter", t[t.soulShooter = 122] = "soulShooter", t[t.desperado = 123] = "desperado", t[t.energySword = 124] = "energySword", t[t.espLimiter = 126] = "espLimiter", t[t.chain = 127] = "chain", t[t.magicGauntlet = 128] = "magicGauntlet", t[t.ritualFan = 129] = "ritualFan", t[t.ohSword = 130] = "ohSword", t[t.ohAxe = 131] = "ohAxe", t[t.ohBlunt = 132] = "ohBlunt", t[t.dagger = 133] = "dagger", t[t.katara = 134] = "katara", t[t.cane = 136] = "cane", t[t.wand = 137] = "wand", t[t.staff = 138] = "staff", t[t.thSword = 140] = "thSword", t[t.chakram = 1404] = "chakram", t[t.thAxe = 141] = "thAxe", t[t.thBlunt = 142] = "thBlunt", t[t.spear = 143] = "spear", t[t.polearm = 144] = "polearm", t[t.bow = 145] = "bow", t[t.crossbow = 146] = "crossbow", t[t.claw = 147] = "claw", t[t.knuckle = 148] = "knuckle", t[t.gun = 149] = "gun", t[t.shovel = 150] = "shovel", t[t.pickaxe = 151] = "pickaxe", t[t.dualBowguns = 152] = "dualBowguns", t[t.handCannon = 153] = "handCannon", t[t.heavySword = 156] = "heavySword", t[t.longSword = 157] = "longSword", t[t.gauntletRevolver = 158] = "gauntletRevolver", t[t.ancientBow = 159] = "ancientBow", t[t.soulShield = 1098] = "soulShield", t[t.demonShield = 1099] = "demonShield", t[t.magicArrow = 135200] = "magicArrow", t[t.card = 135210] = "card", t[t.medallion = 135220] = "medallion", t[t.rosary = 135221] = "rosary", t[t.ironChain = 135222] = "ironChain", t[t.magicBook1 = 135223] = "magicBook1", t[t.magicBook2 = 135224] = "magicBook2", t[t.magicBook3 = 135225] = "magicBook3", t[t.arrowFletching = 135226] = "arrowFletching", t[t.bowThimble = 135227] = "bowThimble", t[t.daggerScabbard = 135228] = "daggerScabbard", t[t.charm = 135229] = "charm", t[t.orb = 135240] = "orb", t[t.dragonEssence = 135250] = "dragonEssence", t[t.soulRing = 135260] = "soulRing", t[t.magnum = 135270] = "magnum", t[t.wristBand = 135290] = "wristBand", t[t.farSight = 135291] = "farSight", t[t.powderKeg = 135292] = "powderKeg", t[t.mass = 135293] = "mass", t[t.document = 135294] = "document", t[t.magicMarble = 135295] = "magicMarble", t[t.arrowhead = 135296] = "arrowhead", t[t.jewel = 135297] = "jewel", t[t.powderKeg2 = 135298] = "powderKeg2", t[t.controller = 135300] = "controller", t[t.foxMarble = 135310] = "foxMarble", t[t.chessPiece = 135320] = "chessPiece", t[t.transmitter = 135330] = "transmitter", t[t.charge = 135340] = "charge", t[t.magicWing = 135350] = "magicWing", t[t.pathOfAbyss = 135360] = "pathOfAbyss", t[t.relic = 135370] = "relic", t[t.fanTassel = 135380] = "fanTassel", t[t.bracelet = 135400] = "bracelet", t[t.weaponBelt = 135401] = "weaponBelt", t[t.ornament = 135402] = "ornament", t[t.hexSeeker = 135403] = "hexSeeker", t[t.petEquip = 180] = "petEquip", t[t.machineEngine = 161] = "machineEngine", t[t.machineArms = 162] = "machineArms", t[t.machineLegs = 163] = "machineLegs", t[t.machineBody = 164] = "machineBody", t[t.machineTransistors = 165] = "machineTransistors", t[t.dragonMask = 194] = "dragonMask", t[t.dragonPendant = 195] = "dragonPendant", t[t.dragonWings = 196] = "dragonWings", t[t.dragonTail = 197] = "dragonTail", t))(i || {}), U = /* @__PURE__ */ ((t) => (t[t.normal = 0] = "normal", t[t.rare = 1] = "rare", t[t.epic = 2] = "epic", t[t.unique = 3] = "unique", t[t.legendary = 4] = "legendary", t[t.special = 5] = "special", t))(U || {});
|
|
25
|
+
class g {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.enchanted = !1, this.charge = 0, this.chargeOption = /* @__PURE__ */ new Map();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class q {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.name = "", this.skill = "", this.multiplier = 0, this.option = /* @__PURE__ */ new Map();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const v = class {
|
|
25
36
|
constructor() {
|
|
26
|
-
this.itemID = 0, this.name = "", this.desc = "", this.icon = 0, this.origin = [0, 0], this.type = 0, this.req = new
|
|
37
|
+
this.itemID = 0, this.name = "", this.desc = "", this.icon = 0, this.origin = [0, 0], this.type = 0, this.req = new K(), this.props = /* @__PURE__ */ new Map(), this.options = /* @__PURE__ */ new Map(), this.totalUpgradeCount = 0, this.upgradeCount = 0, this.upgradeFailCount = 0, this.hammerCount = 0, this.maxStar = 0, this.star = 0, this.amazing = !1, this.canPotential = !1, this.grade = U.normal, this.potentials = [], this.additionalGrade = U.normal, this.additionalPotentials = [], this.soulSlot = new g();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 업그레이드 가능 횟수
|
|
41
|
+
*/
|
|
42
|
+
get upgradeCountLeft() {
|
|
43
|
+
return this.totalUpgradeCount + this.hammerCount - this.upgradeCount - this.upgradeFailCount;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 현재 옵션과 기본 옵션의 차이를 가중치를 포함하여 계산합니다.
|
|
47
|
+
* @returns 가중치가 적용된 옵션 차이의 합
|
|
48
|
+
*/
|
|
49
|
+
get diff() {
|
|
50
|
+
let t = 0;
|
|
51
|
+
for (const [c, s] of this.options)
|
|
52
|
+
t += Math.floor(s.diff / v.getPropTypeWeight(c));
|
|
53
|
+
return t;
|
|
27
54
|
}
|
|
28
55
|
/**
|
|
29
56
|
* 장비 옵션을 반환합니다. 존재하지 않는 옵션은 장비에 추가됩니다.
|
|
@@ -31,7 +58,7 @@ const L = class {
|
|
|
31
58
|
* @returns 장비 옵션 객체
|
|
32
59
|
*/
|
|
33
60
|
option(t) {
|
|
34
|
-
return this.options.has(t) || this.options.set(t, new
|
|
61
|
+
return this.options.has(t) || this.options.set(t, new I()), this.options.get(t);
|
|
35
62
|
}
|
|
36
63
|
/**
|
|
37
64
|
* 장비 속성의 값을 반환합니다.
|
|
@@ -49,38 +76,6 @@ const L = class {
|
|
|
49
76
|
getBooleanValue(t) {
|
|
50
77
|
return Boolean(this.props.get(t));
|
|
51
78
|
}
|
|
52
|
-
/**
|
|
53
|
-
* 장비의 최대 강화 수치를 계산합니다.
|
|
54
|
-
* @returns 최대 장비 강화 수치
|
|
55
|
-
*/
|
|
56
|
-
getMaxStar() {
|
|
57
|
-
if (this.totalUpgradeCount <= 0 || this.getBooleanValue(n.onlyUpgrade) || L.isMechanicGear(this.type) || L.isDragonGear(this.type))
|
|
58
|
-
return 0;
|
|
59
|
-
let t;
|
|
60
|
-
const c = this.req.level;
|
|
61
|
-
for (const i of L.starData)
|
|
62
|
-
if (c >= i[0])
|
|
63
|
-
t = i;
|
|
64
|
-
else
|
|
65
|
-
break;
|
|
66
|
-
return t === void 0 ? 0 : this.getBooleanValue(n.superiorEqp) ? t[2] : t[1];
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* 현재 옵션과 기본 옵션의 차이를 가중치를 포함하여 계산합니다.
|
|
70
|
-
* @returns 가중치가 적용된 옵션 차이의 합
|
|
71
|
-
*/
|
|
72
|
-
get diff() {
|
|
73
|
-
let t = 0;
|
|
74
|
-
for (const [c, i] of this.options)
|
|
75
|
-
t += Math.floor(i.diff / L.getPropTypeWeight(c));
|
|
76
|
-
return t;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* 업그레이드 가능 횟수
|
|
80
|
-
*/
|
|
81
|
-
get upgradeLeft() {
|
|
82
|
-
return this.totalUpgradeCount + this.hammerCount - this.upgradeCount - this.failCount;
|
|
83
|
-
}
|
|
84
79
|
/**
|
|
85
80
|
* 장비가 주무기인지 여부를 나타내는 `boolean`값을 반환합니다. 블레이드(katara)는 포함되지 않습니다.
|
|
86
81
|
* @param type 장비 분류
|
|
@@ -95,7 +90,7 @@ const L = class {
|
|
|
95
90
|
* @returns 한손무기일 경우 `true`; 아닐 경우 `false`
|
|
96
91
|
*/
|
|
97
92
|
static isLeftWeapon(t) {
|
|
98
|
-
return t >= 121 && t <= 139 && t !==
|
|
93
|
+
return t >= 121 && t <= 139 && t !== i.katara || Math.floor(t / 10) === 121;
|
|
99
94
|
}
|
|
100
95
|
/**
|
|
101
96
|
* 장비가 두손무기인지 여부를 나타내는 `boolean`값을 반환합니다.
|
|
@@ -112,10 +107,10 @@ const L = class {
|
|
|
112
107
|
*/
|
|
113
108
|
static isSubWeapon(t) {
|
|
114
109
|
switch (t) {
|
|
115
|
-
case
|
|
116
|
-
case
|
|
117
|
-
case
|
|
118
|
-
case
|
|
110
|
+
case i.katara:
|
|
111
|
+
case i.shield:
|
|
112
|
+
case i.demonShield:
|
|
113
|
+
case i.soulShield:
|
|
119
114
|
return !0;
|
|
120
115
|
default:
|
|
121
116
|
return Math.floor(t / 1e3) === 135;
|
|
@@ -128,9 +123,9 @@ const L = class {
|
|
|
128
123
|
*/
|
|
129
124
|
static isShield(t) {
|
|
130
125
|
switch (t) {
|
|
131
|
-
case
|
|
132
|
-
case
|
|
133
|
-
case
|
|
126
|
+
case i.shield:
|
|
127
|
+
case i.demonShield:
|
|
128
|
+
case i.soulShield:
|
|
134
129
|
return !0;
|
|
135
130
|
default:
|
|
136
131
|
return !1;
|
|
@@ -170,16 +165,16 @@ const L = class {
|
|
|
170
165
|
}
|
|
171
166
|
static specialCanPotential(t) {
|
|
172
167
|
switch (t) {
|
|
173
|
-
case
|
|
174
|
-
case
|
|
175
|
-
case
|
|
176
|
-
case
|
|
177
|
-
case
|
|
178
|
-
case
|
|
179
|
-
case
|
|
180
|
-
case
|
|
181
|
-
case
|
|
182
|
-
case
|
|
168
|
+
case i.soulShield:
|
|
169
|
+
case i.demonShield:
|
|
170
|
+
case i.katara:
|
|
171
|
+
case i.magicArrow:
|
|
172
|
+
case i.card:
|
|
173
|
+
case i.orb:
|
|
174
|
+
case i.dragonEssence:
|
|
175
|
+
case i.soulRing:
|
|
176
|
+
case i.magnum:
|
|
177
|
+
case i.emblem:
|
|
183
178
|
return !0;
|
|
184
179
|
default:
|
|
185
180
|
return !1;
|
|
@@ -193,17 +188,17 @@ const L = class {
|
|
|
193
188
|
static getGearType(t) {
|
|
194
189
|
switch (Math.floor(t / 1e3)) {
|
|
195
190
|
case 1098:
|
|
196
|
-
return
|
|
191
|
+
return i.soulShield;
|
|
197
192
|
case 1099:
|
|
198
|
-
return
|
|
193
|
+
return i.demonShield;
|
|
199
194
|
case 1212:
|
|
200
|
-
return
|
|
195
|
+
return i.shiningRod;
|
|
201
196
|
case 1213:
|
|
202
|
-
return
|
|
197
|
+
return i.tuner;
|
|
203
198
|
case 1214:
|
|
204
|
-
return
|
|
199
|
+
return i.breathShooter;
|
|
205
200
|
case 1404:
|
|
206
|
-
return
|
|
201
|
+
return i.chakram;
|
|
207
202
|
}
|
|
208
203
|
if (Math.floor(t / 1e4) === 135)
|
|
209
204
|
switch (Math.floor(t / 100)) {
|
|
@@ -224,12 +219,29 @@ const L = class {
|
|
|
224
219
|
}
|
|
225
220
|
static GetGender(t) {
|
|
226
221
|
switch (this.getGearType(t)) {
|
|
227
|
-
case
|
|
228
|
-
case
|
|
222
|
+
case i.emblem:
|
|
223
|
+
case i.powerSource:
|
|
229
224
|
return 2;
|
|
230
225
|
}
|
|
231
226
|
return Math.floor(t / 1e3) % 10;
|
|
232
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* 장비의 최대 강화 수치를 계산합니다.
|
|
230
|
+
* @param gear 장비
|
|
231
|
+
* @returns 최대 장비 강화 수치
|
|
232
|
+
*/
|
|
233
|
+
static getMaxStar(t) {
|
|
234
|
+
if (t.totalUpgradeCount <= 0 || t.getBooleanValue(n.onlyUpgrade) || v.isMechanicGear(t.type) || v.isDragonGear(t.type))
|
|
235
|
+
return 0;
|
|
236
|
+
let c;
|
|
237
|
+
const s = t.req.level;
|
|
238
|
+
for (const o of v.starData)
|
|
239
|
+
if (s >= o[0])
|
|
240
|
+
c = o;
|
|
241
|
+
else
|
|
242
|
+
break;
|
|
243
|
+
return c === void 0 ? 0 : t.getBooleanValue(n.superiorEqp) ? c[2] : c[1];
|
|
244
|
+
}
|
|
233
245
|
static getPropTypeWeight(t) {
|
|
234
246
|
if (t < 100)
|
|
235
247
|
switch (t) {
|
|
@@ -245,20 +257,16 @@ const L = class {
|
|
|
245
257
|
case n.incMHP:
|
|
246
258
|
case n.incMMP:
|
|
247
259
|
return 100;
|
|
248
|
-
case n.incPDD_incMDD:
|
|
249
260
|
case n.incPDD:
|
|
250
261
|
return 10;
|
|
251
|
-
case n.incPAD_incMAD:
|
|
252
262
|
case n.incAD:
|
|
253
263
|
return 2;
|
|
254
|
-
case n.incMHP_incMMP:
|
|
255
|
-
return 200;
|
|
256
264
|
}
|
|
257
265
|
return Number.MAX_VALUE;
|
|
258
266
|
}
|
|
259
267
|
};
|
|
260
|
-
let
|
|
261
|
-
|
|
268
|
+
let M = v;
|
|
269
|
+
M.starData = [
|
|
262
270
|
[0, 5, 3],
|
|
263
271
|
[95, 8, 5],
|
|
264
272
|
[110, 10, 8],
|
|
@@ -275,14 +283,14 @@ class C {
|
|
|
275
283
|
*/
|
|
276
284
|
get convertSummary() {
|
|
277
285
|
const c = [...this.option.keys()];
|
|
278
|
-
c.sort((
|
|
279
|
-
let
|
|
280
|
-
for (const
|
|
281
|
-
|
|
282
|
-
`#${n[
|
|
283
|
-
(this.option.get(
|
|
286
|
+
c.sort((o, a) => n[a].length - n[o].length);
|
|
287
|
+
let s = this.summary;
|
|
288
|
+
for (const o of c)
|
|
289
|
+
s = s.replace(
|
|
290
|
+
`#${n[o]}`,
|
|
291
|
+
(this.option.get(o) ?? 0).toString()
|
|
284
292
|
);
|
|
285
|
-
return
|
|
293
|
+
return s;
|
|
286
294
|
}
|
|
287
295
|
/**
|
|
288
296
|
* 장비의 착용 가능 레벨로부터 잠재옵션의 레벨을 계산합니다.
|
|
@@ -298,512 +306,35 @@ class C {
|
|
|
298
306
|
* @param gearType 장비 분류
|
|
299
307
|
* @returns 잠재옵션 분류가 장비 분류에 적용 가능한 경우 `true`; 아닌 경우 `false`
|
|
300
308
|
*/
|
|
301
|
-
static checkOptionType(c,
|
|
309
|
+
static checkOptionType(c, s) {
|
|
302
310
|
switch (c) {
|
|
303
311
|
case 0:
|
|
304
312
|
return !0;
|
|
305
313
|
case 10:
|
|
306
|
-
return
|
|
314
|
+
return M.isWeapon(s) || M.isSubWeapon(s) || s === i.emblem;
|
|
307
315
|
case 11:
|
|
308
|
-
return !C.checkOptionType(10,
|
|
316
|
+
return !C.checkOptionType(10, s);
|
|
309
317
|
case 20:
|
|
310
|
-
return
|
|
318
|
+
return M.isSubWeapon(s) || s === i.cap || s === i.coat || s === i.longcoat || s === i.pants || s === i.shoes || s === i.glove || s === i.cape || s === i.belt || s === i.shoulder;
|
|
311
319
|
case 40:
|
|
312
|
-
return
|
|
320
|
+
return s === i.faceAccessory || s === i.eyeAccessory || s === i.earrings || s === i.ring || s === i.pendant;
|
|
313
321
|
case 51:
|
|
314
|
-
return
|
|
322
|
+
return s === i.cap;
|
|
315
323
|
case 52:
|
|
316
|
-
return
|
|
324
|
+
return s === i.coat || s === i.longcoat;
|
|
317
325
|
case 53:
|
|
318
|
-
return
|
|
326
|
+
return s === i.pants;
|
|
319
327
|
case 54:
|
|
320
|
-
return
|
|
328
|
+
return s === i.glove;
|
|
321
329
|
case 55:
|
|
322
|
-
return
|
|
330
|
+
return s === i.shoes;
|
|
323
331
|
default:
|
|
324
332
|
return !1;
|
|
325
333
|
}
|
|
326
334
|
}
|
|
327
335
|
}
|
|
328
|
-
var e = /* @__PURE__ */ ((t) => (t.EX_PAD = "위대한 (공격력)", t.EX_MAD = "위대한 (마력)", t.EX_ALL = "위대한 (올스탯)", t.EX_MHP = "위대한 (최대 HP)", t.EX_CR = "위대한 (크리티컬 확률)", t.EX_IMD = "위대한 (몬스터 방어율 무시)", t.EX_BD = "위대한 (보스 몬스터 공격 시 데미지)", t.EX_AS = "위대한 (모든 스킬레벨)", t.STR = "기운찬", t.DEX = "날렵한", t.INT = "총명한", t.LUK = "놀라운", t.ALL = "화려한", t.PAD = "강력한", t.MAD = "빛나는", t.MHP = "강인한", t.MMP = "풍부한", t))(e || {});
|
|
329
|
-
class U {
|
|
330
|
-
constructor() {
|
|
331
|
-
this.charge = 0, this.mobName = "", this.soulName = "", this.skillName = "", this.optionString = "", this.option = /* @__PURE__ */ new Map();
|
|
332
|
-
}
|
|
333
|
-
isEmpty() {
|
|
334
|
-
return this.soulName === "";
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* 소울 충전량으로 증가하는 공격력/마력
|
|
338
|
-
*/
|
|
339
|
-
get chargeAD() {
|
|
340
|
-
return this.isEmpty() ? Math.floor(Math.min(500, this.charge) / 100) * 2 : N.getSoulGrade(this.mobName) <= 6 ? Math.floor(Math.min(500, this.charge) / 100) * 4 : Math.floor(Math.min(500, this.charge) / 100) * 3;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* 몬스터 이름, 소울 종류로부터 소울을 생성합니다.
|
|
344
|
-
* @param mobName 몬스터 이름
|
|
345
|
-
* @param soulType 소울 종류
|
|
346
|
-
* @returns 일치하는 소울; 존재하지 않을 경우 `undefined`
|
|
347
|
-
*/
|
|
348
|
-
static createFromName(c, i) {
|
|
349
|
-
const s = new U();
|
|
350
|
-
s.mobName = c, s.soulName = N.getSoulName(c, i), s.skillName = N.getSkillName(c, i);
|
|
351
|
-
const { option: l, optionString: r } = N.getSoulOption(
|
|
352
|
-
c,
|
|
353
|
-
i
|
|
354
|
-
);
|
|
355
|
-
return s.option = l, s.optionString = r, s;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
class N {
|
|
359
|
-
static getSoulGrade(c) {
|
|
360
|
-
return X[c].grade;
|
|
361
|
-
}
|
|
362
|
-
static hasPostfix(c) {
|
|
363
|
-
return X[c].namePostfix;
|
|
364
|
-
}
|
|
365
|
-
static isGreatType(c) {
|
|
366
|
-
return c === e.EX_PAD || c === e.EX_MAD || c === e.EX_ALL || c === e.EX_MHP || c === e.EX_CR || c === e.EX_IMD || c === e.EX_BD || c === e.EX_AS;
|
|
367
|
-
}
|
|
368
|
-
static getSoulName(c, i) {
|
|
369
|
-
let s;
|
|
370
|
-
N.isGreatType(i) ? s = "위대한" : s = i;
|
|
371
|
-
let l;
|
|
372
|
-
return N.hasPostfix(c) ? l = "의" : l = "", s + " " + c + l + " 소울";
|
|
373
|
-
}
|
|
374
|
-
static getSkillName(c, i) {
|
|
375
|
-
return this.isGreatType(i) ? X[c].greatSkillName : X[c].normalSkillName;
|
|
376
|
-
}
|
|
377
|
-
static getSoulOption(c, i) {
|
|
378
|
-
const s = /* @__PURE__ */ new Map(), l = this.getSoulOptionType(c, i), r = this.getSoulOptionValue(c, i), m = this.getSoulOptionString(l, r);
|
|
379
|
-
return s.set(l, r), { option: s, optionString: m };
|
|
380
|
-
}
|
|
381
|
-
static getSoulOptionType(c, i) {
|
|
382
|
-
const s = this.getSoulGrade(c) === 1;
|
|
383
|
-
switch (i) {
|
|
384
|
-
case e.EX_PAD:
|
|
385
|
-
return s ? n.incPADr : n.incPAD;
|
|
386
|
-
case e.EX_MAD:
|
|
387
|
-
return s ? n.incMADr : n.incMAD;
|
|
388
|
-
case e.EX_ALL:
|
|
389
|
-
return s ? n.statR : n.incAllStat;
|
|
390
|
-
case e.EX_MHP:
|
|
391
|
-
return n.incMHP;
|
|
392
|
-
case e.EX_CR:
|
|
393
|
-
return n.incCr;
|
|
394
|
-
case e.EX_IMD:
|
|
395
|
-
return n.imdR;
|
|
396
|
-
case e.EX_BD:
|
|
397
|
-
return n.bdR;
|
|
398
|
-
case e.EX_AS:
|
|
399
|
-
return n.incAllskill;
|
|
400
|
-
case e.STR:
|
|
401
|
-
return n.incSTR;
|
|
402
|
-
case e.DEX:
|
|
403
|
-
return n.incDEX;
|
|
404
|
-
case e.INT:
|
|
405
|
-
return n.incINT;
|
|
406
|
-
case e.LUK:
|
|
407
|
-
return n.incLUK;
|
|
408
|
-
case e.ALL:
|
|
409
|
-
return n.incAllStat;
|
|
410
|
-
case e.PAD:
|
|
411
|
-
return n.incPAD;
|
|
412
|
-
case e.MAD:
|
|
413
|
-
return n.incMAD;
|
|
414
|
-
case e.MHP:
|
|
415
|
-
return n.incMHP;
|
|
416
|
-
case e.MMP:
|
|
417
|
-
return n.incMMP;
|
|
418
|
-
default:
|
|
419
|
-
throw Error();
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
static getSoulOptionString(c, i) {
|
|
423
|
-
switch (c) {
|
|
424
|
-
case n.incSTR:
|
|
425
|
-
return `STR : +${i}`;
|
|
426
|
-
case n.incDEX:
|
|
427
|
-
return `DEX : +${i}`;
|
|
428
|
-
case n.incINT:
|
|
429
|
-
return `INT : +${i}`;
|
|
430
|
-
case n.incLUK:
|
|
431
|
-
return `LUK : +${i}`;
|
|
432
|
-
case n.incAllStat:
|
|
433
|
-
return `올스탯 : +${i}`;
|
|
434
|
-
case n.statR:
|
|
435
|
-
return `올스탯 : +${i}%`;
|
|
436
|
-
case n.incMHP:
|
|
437
|
-
return `최대 HP : +${i}`;
|
|
438
|
-
case n.incMMP:
|
|
439
|
-
return `최대 MP : +${i}`;
|
|
440
|
-
case n.incPAD:
|
|
441
|
-
return `공격력 : +${i}`;
|
|
442
|
-
case n.incPADr:
|
|
443
|
-
return `공격력 : +${i}%`;
|
|
444
|
-
case n.incMAD:
|
|
445
|
-
return `마력 : +${i}`;
|
|
446
|
-
case n.incMADr:
|
|
447
|
-
return `마력 : +${i}%`;
|
|
448
|
-
case n.imdR:
|
|
449
|
-
return `몬스터 방어율 무시 : +${i}%`;
|
|
450
|
-
case n.bdR:
|
|
451
|
-
return `보스 몬스터 공격 시 데미지 : +${i}%`;
|
|
452
|
-
case n.incCr:
|
|
453
|
-
return `크리티컬 확률 : +${i}%`;
|
|
454
|
-
case n.incAllskill:
|
|
455
|
-
return `모든 스킬레벨 : +${i}(5차 제외, 스킬의 마스터 레벨까지만 증가)`;
|
|
456
|
-
default:
|
|
457
|
-
return "";
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
static getSoulOptionValue(c, i) {
|
|
461
|
-
if (this.isGreatType(i)) {
|
|
462
|
-
if (c === "모카딘" && i === e.EX_PAD || c === "카리아인" && i === e.EX_MAD)
|
|
463
|
-
return 10;
|
|
464
|
-
if (c === "줄라이" && i === e.EX_MHP)
|
|
465
|
-
return 1500;
|
|
466
|
-
if (c === "CQ57" && i === e.EX_CR)
|
|
467
|
-
return 10;
|
|
468
|
-
if (c === "플레드" && i === e.EX_ALL)
|
|
469
|
-
return 20;
|
|
470
|
-
let s = this.getSoulGrade(c);
|
|
471
|
-
s === 4 && c !== "반 레온" && (s = 3);
|
|
472
|
-
let l;
|
|
473
|
-
switch (i) {
|
|
474
|
-
case e.EX_PAD:
|
|
475
|
-
l = 0;
|
|
476
|
-
break;
|
|
477
|
-
case e.EX_MAD:
|
|
478
|
-
l = 0;
|
|
479
|
-
break;
|
|
480
|
-
case e.EX_ALL:
|
|
481
|
-
l = 1;
|
|
482
|
-
break;
|
|
483
|
-
case e.EX_MHP:
|
|
484
|
-
l = 2;
|
|
485
|
-
break;
|
|
486
|
-
case e.EX_CR:
|
|
487
|
-
l = 3;
|
|
488
|
-
break;
|
|
489
|
-
case e.EX_IMD:
|
|
490
|
-
l = 4;
|
|
491
|
-
break;
|
|
492
|
-
case e.EX_BD:
|
|
493
|
-
l = 4;
|
|
494
|
-
break;
|
|
495
|
-
case e.EX_AS:
|
|
496
|
-
l = 5;
|
|
497
|
-
break;
|
|
498
|
-
default:
|
|
499
|
-
return 0;
|
|
500
|
-
}
|
|
501
|
-
return $[s][l];
|
|
502
|
-
} else {
|
|
503
|
-
if (c === "모카딘" && i === e.STR || c === "카리아인" && i === e.INT || c === "줄라이" && i === e.DEX || c === "CQ57" && i === e.LUK)
|
|
504
|
-
return 20;
|
|
505
|
-
if (c === "플레드" && i === e.ALL)
|
|
506
|
-
return 12;
|
|
507
|
-
let s;
|
|
508
|
-
switch (i) {
|
|
509
|
-
case e.STR:
|
|
510
|
-
s = 0;
|
|
511
|
-
break;
|
|
512
|
-
case e.DEX:
|
|
513
|
-
s = 0;
|
|
514
|
-
break;
|
|
515
|
-
case e.INT:
|
|
516
|
-
s = 0;
|
|
517
|
-
break;
|
|
518
|
-
case e.LUK:
|
|
519
|
-
s = 0;
|
|
520
|
-
break;
|
|
521
|
-
case e.ALL:
|
|
522
|
-
s = 1;
|
|
523
|
-
break;
|
|
524
|
-
case e.PAD:
|
|
525
|
-
s = 2;
|
|
526
|
-
break;
|
|
527
|
-
case e.MAD:
|
|
528
|
-
s = 2;
|
|
529
|
-
break;
|
|
530
|
-
case e.MHP:
|
|
531
|
-
s = 3;
|
|
532
|
-
break;
|
|
533
|
-
case e.MMP:
|
|
534
|
-
s = 3;
|
|
535
|
-
break;
|
|
536
|
-
default:
|
|
537
|
-
return 0;
|
|
538
|
-
}
|
|
539
|
-
return V[this.getSoulGrade(c)][s];
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
static getSoulMobNames() {
|
|
543
|
-
return Object.keys(X);
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
const X = {
|
|
547
|
-
시그너스: {
|
|
548
|
-
grade: 1,
|
|
549
|
-
namePostfix: !0,
|
|
550
|
-
normalSkillName: "불꽃 여제",
|
|
551
|
-
greatSkillName: "폭풍 여제"
|
|
552
|
-
},
|
|
553
|
-
매그너스: {
|
|
554
|
-
grade: 1,
|
|
555
|
-
namePostfix: !0,
|
|
556
|
-
normalSkillName: "진격! 그게 바로 나다",
|
|
557
|
-
greatSkillName: "폭격! 그게 바로 나다"
|
|
558
|
-
},
|
|
559
|
-
무르무르: {
|
|
560
|
-
grade: 1,
|
|
561
|
-
namePostfix: !0,
|
|
562
|
-
normalSkillName: "무르무르의 이상한 동행",
|
|
563
|
-
greatSkillName: "무르무르의 수상한 동행"
|
|
564
|
-
},
|
|
565
|
-
블러디퀸: {
|
|
566
|
-
grade: 1,
|
|
567
|
-
namePostfix: !0,
|
|
568
|
-
normalSkillName: "여왕의 마음은 갈대",
|
|
569
|
-
greatSkillName: "여왕님이 함께 하셔!"
|
|
570
|
-
},
|
|
571
|
-
벨룸: {
|
|
572
|
-
grade: 1,
|
|
573
|
-
namePostfix: !0,
|
|
574
|
-
normalSkillName: "기가 벨룸 레이저",
|
|
575
|
-
greatSkillName: "주니어 벨룸 소환!"
|
|
576
|
-
},
|
|
577
|
-
스우: {
|
|
578
|
-
grade: 1,
|
|
579
|
-
namePostfix: !0,
|
|
580
|
-
normalSkillName: "때렸스우~",
|
|
581
|
-
greatSkillName: "화났스우~"
|
|
582
|
-
},
|
|
583
|
-
데미안: {
|
|
584
|
-
grade: 1,
|
|
585
|
-
namePostfix: !0,
|
|
586
|
-
normalSkillName: "사냥 개시",
|
|
587
|
-
greatSkillName: "파멸의 검"
|
|
588
|
-
},
|
|
589
|
-
루시드: {
|
|
590
|
-
grade: 1,
|
|
591
|
-
namePostfix: !0,
|
|
592
|
-
normalSkillName: "악몽으로의 초대",
|
|
593
|
-
greatSkillName: "악몽의 지배자"
|
|
594
|
-
},
|
|
595
|
-
윌: {
|
|
596
|
-
grade: 1,
|
|
597
|
-
namePostfix: !0,
|
|
598
|
-
normalSkillName: "파괴의 손아귀",
|
|
599
|
-
greatSkillName: "거미의 왕"
|
|
600
|
-
},
|
|
601
|
-
"진 힐라": {
|
|
602
|
-
grade: 1,
|
|
603
|
-
namePostfix: !0,
|
|
604
|
-
normalSkillName: "영혼 찢기",
|
|
605
|
-
greatSkillName: "붉은 마녀"
|
|
606
|
-
},
|
|
607
|
-
듄켈: {
|
|
608
|
-
grade: 1,
|
|
609
|
-
namePostfix: !0,
|
|
610
|
-
normalSkillName: "지면 절단",
|
|
611
|
-
greatSkillName: "지면 파쇄"
|
|
612
|
-
},
|
|
613
|
-
칼로스: {
|
|
614
|
-
grade: 1,
|
|
615
|
-
namePostfix: !0,
|
|
616
|
-
normalSkillName: "감시자의 포효",
|
|
617
|
-
greatSkillName: "침입자 처단"
|
|
618
|
-
},
|
|
619
|
-
핑크빈: {
|
|
620
|
-
grade: 2,
|
|
621
|
-
namePostfix: !0,
|
|
622
|
-
normalSkillName: "까칠한 귀여움",
|
|
623
|
-
greatSkillName: "치명적인 귀여움"
|
|
624
|
-
},
|
|
625
|
-
피에르: {
|
|
626
|
-
grade: 2,
|
|
627
|
-
namePostfix: !0,
|
|
628
|
-
normalSkillName: "피에르의 모자선물",
|
|
629
|
-
greatSkillName: "깜짝 피에르!"
|
|
630
|
-
},
|
|
631
|
-
반반: {
|
|
632
|
-
grade: 2,
|
|
633
|
-
namePostfix: !0,
|
|
634
|
-
normalSkillName: "불닭의 따끔한 맛",
|
|
635
|
-
greatSkillName: "치킨 날다!"
|
|
636
|
-
},
|
|
637
|
-
우르스: {
|
|
638
|
-
grade: 2,
|
|
639
|
-
namePostfix: !0,
|
|
640
|
-
normalSkillName: "파왕의 포효",
|
|
641
|
-
greatSkillName: "파왕의 거친 포효"
|
|
642
|
-
},
|
|
643
|
-
아카이럼: {
|
|
644
|
-
grade: 3,
|
|
645
|
-
namePostfix: !0,
|
|
646
|
-
normalSkillName: "스네이크 사우론",
|
|
647
|
-
greatSkillName: "메두사카이럼"
|
|
648
|
-
},
|
|
649
|
-
모카딘: {
|
|
650
|
-
grade: 3,
|
|
651
|
-
namePostfix: !0,
|
|
652
|
-
normalSkillName: "검은 기사 모카딘",
|
|
653
|
-
greatSkillName: "어둠 기사 모카딘"
|
|
654
|
-
},
|
|
655
|
-
카리아인: {
|
|
656
|
-
grade: 3,
|
|
657
|
-
namePostfix: !0,
|
|
658
|
-
normalSkillName: "미친 마법사 카리아인",
|
|
659
|
-
greatSkillName: "폭주 마법사 카리아인"
|
|
660
|
-
},
|
|
661
|
-
CQ57: {
|
|
662
|
-
grade: 3,
|
|
663
|
-
namePostfix: !0,
|
|
664
|
-
normalSkillName: "돌격형 CQ57",
|
|
665
|
-
greatSkillName: "상급 돌격형 CQ57"
|
|
666
|
-
},
|
|
667
|
-
줄라이: {
|
|
668
|
-
grade: 3,
|
|
669
|
-
namePostfix: !0,
|
|
670
|
-
normalSkillName: "인간 사냥꾼 줄라이",
|
|
671
|
-
greatSkillName: "피의 사냥꾼 줄라이"
|
|
672
|
-
},
|
|
673
|
-
플레드: {
|
|
674
|
-
grade: 3,
|
|
675
|
-
namePostfix: !0,
|
|
676
|
-
normalSkillName: "싸움꾼 플레드",
|
|
677
|
-
greatSkillName: "거친 싸움꾼 플레드"
|
|
678
|
-
},
|
|
679
|
-
"반 레온": {
|
|
680
|
-
grade: 4,
|
|
681
|
-
namePostfix: !0,
|
|
682
|
-
normalSkillName: "야옹이 권법 : 할퀴기 초식",
|
|
683
|
-
greatSkillName: "야옹이 권법 : 크로스 따귀 어택"
|
|
684
|
-
},
|
|
685
|
-
힐라: {
|
|
686
|
-
grade: 4,
|
|
687
|
-
namePostfix: !0,
|
|
688
|
-
normalSkillName: "마른 하늘에 번개 어택",
|
|
689
|
-
greatSkillName: "마른 하늘에 벼락 어택"
|
|
690
|
-
},
|
|
691
|
-
파풀라투스: {
|
|
692
|
-
grade: 4,
|
|
693
|
-
namePostfix: !0,
|
|
694
|
-
normalSkillName: "공간의 지배자",
|
|
695
|
-
greatSkillName: "시간의 지배자"
|
|
696
|
-
},
|
|
697
|
-
자쿰: {
|
|
698
|
-
grade: 5,
|
|
699
|
-
namePostfix: !0,
|
|
700
|
-
normalSkillName: "뜨거운 토템 투하",
|
|
701
|
-
greatSkillName: "화끈한 토템 투하"
|
|
702
|
-
},
|
|
703
|
-
발록: {
|
|
704
|
-
grade: 6,
|
|
705
|
-
namePostfix: !0,
|
|
706
|
-
normalSkillName: "지옥불 트림",
|
|
707
|
-
greatSkillName: "지옥불 재채기"
|
|
708
|
-
},
|
|
709
|
-
돼지바: {
|
|
710
|
-
grade: 6,
|
|
711
|
-
namePostfix: !1,
|
|
712
|
-
normalSkillName: "돼지바 스윙!",
|
|
713
|
-
greatSkillName: "돼지바 드랍!"
|
|
714
|
-
},
|
|
715
|
-
프리미엄PC방: {
|
|
716
|
-
grade: 6,
|
|
717
|
-
namePostfix: !1,
|
|
718
|
-
normalSkillName: "PC방에서 메이플을 켰다!",
|
|
719
|
-
greatSkillName: "프리미엄 PC방은 빵빵해"
|
|
720
|
-
},
|
|
721
|
-
무공: {
|
|
722
|
-
grade: 7,
|
|
723
|
-
namePostfix: !0,
|
|
724
|
-
normalSkillName: "회춘신공",
|
|
725
|
-
greatSkillName: ""
|
|
726
|
-
},
|
|
727
|
-
피아누스: {
|
|
728
|
-
grade: 7,
|
|
729
|
-
namePostfix: !0,
|
|
730
|
-
normalSkillName: "공포의 마빡생선",
|
|
731
|
-
greatSkillName: ""
|
|
732
|
-
},
|
|
733
|
-
"드래곤 라이더": {
|
|
734
|
-
grade: 8,
|
|
735
|
-
namePostfix: !0,
|
|
736
|
-
normalSkillName: "손바닥 장풍",
|
|
737
|
-
greatSkillName: ""
|
|
738
|
-
},
|
|
739
|
-
렉스: {
|
|
740
|
-
grade: 8,
|
|
741
|
-
namePostfix: !0,
|
|
742
|
-
normalSkillName: "내 앞길을 막지마",
|
|
743
|
-
greatSkillName: ""
|
|
744
|
-
},
|
|
745
|
-
에피네아: {
|
|
746
|
-
grade: 9,
|
|
747
|
-
namePostfix: !0,
|
|
748
|
-
normalSkillName: "여왕의 향기는 나빌레라",
|
|
749
|
-
greatSkillName: ""
|
|
750
|
-
},
|
|
751
|
-
핑크몽: {
|
|
752
|
-
grade: 9,
|
|
753
|
-
namePostfix: !0,
|
|
754
|
-
normalSkillName: "해피 뉴 에브리데이!",
|
|
755
|
-
greatSkillName: ""
|
|
756
|
-
},
|
|
757
|
-
"락 스피릿": {
|
|
758
|
-
grade: 10,
|
|
759
|
-
namePostfix: !0,
|
|
760
|
-
normalSkillName: "로큰롤 베이비",
|
|
761
|
-
greatSkillName: ""
|
|
762
|
-
},
|
|
763
|
-
"교도관 아니": {
|
|
764
|
-
grade: 10,
|
|
765
|
-
namePostfix: !0,
|
|
766
|
-
normalSkillName: "난 한놈만 패",
|
|
767
|
-
greatSkillName: ""
|
|
768
|
-
},
|
|
769
|
-
크세르크세스: {
|
|
770
|
-
grade: 10,
|
|
771
|
-
namePostfix: !0,
|
|
772
|
-
normalSkillName: "특공 염소 어택",
|
|
773
|
-
greatSkillName: ""
|
|
774
|
-
},
|
|
775
|
-
"블랙 슬라임": {
|
|
776
|
-
grade: 10,
|
|
777
|
-
namePostfix: !0,
|
|
778
|
-
normalSkillName: "핑크빛 독안개",
|
|
779
|
-
greatSkillName: ""
|
|
780
|
-
}
|
|
781
|
-
}, $ = [
|
|
782
|
-
[],
|
|
783
|
-
[3, 5, 2e3, 12, 7, 2],
|
|
784
|
-
[10, 20, 1500, 10, 5, 1],
|
|
785
|
-
[8, 17, 1300, 8, 4, 1],
|
|
786
|
-
[7, 15, 1200, 7, 4, 1],
|
|
787
|
-
[6, 12, 1100, 6, 3, 1],
|
|
788
|
-
[5, 10, 1e3, 5, 3, 1]
|
|
789
|
-
], V = [
|
|
790
|
-
[],
|
|
791
|
-
[24, 15, 6, 960],
|
|
792
|
-
[20, 12, 5, 800],
|
|
793
|
-
[18, 10, 4, 700],
|
|
794
|
-
[15, 8, 3, 600],
|
|
795
|
-
[12, 8, 3, 500],
|
|
796
|
-
[10, 7, 3, 400],
|
|
797
|
-
[7, 5, 0, 300],
|
|
798
|
-
[5, 3, 0, 200],
|
|
799
|
-
[4, 2, 0, 180],
|
|
800
|
-
[3, 2, 0, 150]
|
|
801
|
-
];
|
|
802
|
-
function W() {
|
|
803
|
-
return N.getSoulMobNames();
|
|
804
|
-
}
|
|
805
336
|
var u = /* @__PURE__ */ ((t) => (t[t.STR = 0] = "STR", t[t.DEX = 1] = "DEX", t[t.INT = 2] = "INT", t[t.LUK = 3] = "LUK", t[t.STR_DEX = 4] = "STR_DEX", t[t.STR_INT = 5] = "STR_INT", t[t.STR_LUK = 6] = "STR_LUK", t[t.DEX_INT = 7] = "DEX_INT", t[t.DEX_LUK = 8] = "DEX_LUK", t[t.INT_LUK = 9] = "INT_LUK", t[t.PDD = 10] = "PDD", t[t.PAD = 11] = "PAD", t[t.MAD = 12] = "MAD", t[t.MHP = 13] = "MHP", t[t.MMP = 14] = "MMP", t[t.speed = 15] = "speed", t[t.jump = 16] = "jump", t[t.damR = 17] = "damR", t[t.bdR = 18] = "bdR", t[t.allStatR = 19] = "allStatR", t[t.reduceReq = 20] = "reduceReq", t))(u || {});
|
|
806
|
-
class
|
|
337
|
+
class X {
|
|
807
338
|
/**
|
|
808
339
|
* 장비에 1개의 추가옵션을 추가합니다. 기존에 부여된 추가옵션에 더해집니다.
|
|
809
340
|
* @param gear 추가옵션을 추가할 장비
|
|
@@ -811,12 +342,12 @@ class _ {
|
|
|
811
342
|
* @param grade 추가옵션 등급; 1~7의 정수
|
|
812
343
|
* @returns 추가옵션 부여애 성공했을 경우 `true`; 아닐 경우 `false`
|
|
813
344
|
*/
|
|
814
|
-
addBonusStat(c,
|
|
815
|
-
const
|
|
816
|
-
if (
|
|
345
|
+
addBonusStat(c, s, o) {
|
|
346
|
+
const a = this.getBonusStatOption(c, s, o);
|
|
347
|
+
if (a.size === 0)
|
|
817
348
|
return !1;
|
|
818
|
-
for (const [
|
|
819
|
-
c.option(
|
|
349
|
+
for (const [h, e] of a)
|
|
350
|
+
c.option(h).bonus += e;
|
|
820
351
|
return !0;
|
|
821
352
|
}
|
|
822
353
|
/**
|
|
@@ -825,101 +356,101 @@ class _ {
|
|
|
825
356
|
* @returns 추가옵션 초기화에 성공했을 경우 `true`; 아닐 경우 `false`
|
|
826
357
|
*/
|
|
827
358
|
resetBonusStat(c) {
|
|
828
|
-
for (const [,
|
|
829
|
-
|
|
359
|
+
for (const [, s] of c.options)
|
|
360
|
+
s.bonus = 0;
|
|
830
361
|
return !0;
|
|
831
362
|
}
|
|
832
|
-
getBonusStatOption(c,
|
|
833
|
-
const
|
|
834
|
-
return
|
|
363
|
+
getBonusStatOption(c, s, o) {
|
|
364
|
+
const a = X.getGearPropType(s), h = this.getBonusStatValue(c, s, o);
|
|
365
|
+
return h === 0 ? /* @__PURE__ */ new Map() : new Map(a.map((e) => [e, h]));
|
|
835
366
|
}
|
|
836
|
-
getBonusStatValue(c,
|
|
837
|
-
const
|
|
838
|
-
if (
|
|
367
|
+
getBonusStatValue(c, s, o) {
|
|
368
|
+
const a = c.req.level, h = c.getBooleanValue(n.bossReward), e = c.type;
|
|
369
|
+
if (a < 0 || h && o < 3)
|
|
839
370
|
return 0;
|
|
840
|
-
switch (
|
|
371
|
+
switch (s) {
|
|
841
372
|
case u.STR:
|
|
842
373
|
case u.DEX:
|
|
843
374
|
case u.INT:
|
|
844
375
|
case u.LUK:
|
|
845
|
-
return (Math.floor(
|
|
376
|
+
return (Math.floor(a / 20) + 1) * o;
|
|
846
377
|
case u.STR_DEX:
|
|
847
378
|
case u.STR_INT:
|
|
848
379
|
case u.STR_LUK:
|
|
849
380
|
case u.DEX_INT:
|
|
850
381
|
case u.DEX_LUK:
|
|
851
382
|
case u.INT_LUK:
|
|
852
|
-
return (Math.floor(
|
|
383
|
+
return (Math.floor(a / 40) + 1) * o;
|
|
853
384
|
case u.PDD:
|
|
854
|
-
return (Math.floor(
|
|
385
|
+
return (Math.floor(a / 20) + 1) * o;
|
|
855
386
|
case u.PAD:
|
|
856
387
|
case u.MAD:
|
|
857
|
-
if (
|
|
858
|
-
const
|
|
859
|
-
let
|
|
860
|
-
if (
|
|
861
|
-
if (
|
|
862
|
-
switch (
|
|
388
|
+
if (M.isWeapon(e)) {
|
|
389
|
+
const r = h ? [0, 0, 1, 1.4666, 2.0166, 2.663, 3.4166] : [1, 2.222, 3.63, 5.325, 7.32, 8.777, 10.25];
|
|
390
|
+
let l = c.option(n.incPAD).base;
|
|
391
|
+
if (e === i.heavySword || e === i.longSword) {
|
|
392
|
+
if (e === i.longSword)
|
|
393
|
+
switch (l) {
|
|
863
394
|
case 100:
|
|
864
|
-
|
|
395
|
+
l = 102;
|
|
865
396
|
break;
|
|
866
397
|
case 103:
|
|
867
|
-
|
|
398
|
+
l = 105;
|
|
868
399
|
break;
|
|
869
400
|
case 105:
|
|
870
|
-
|
|
401
|
+
l = 107;
|
|
871
402
|
break;
|
|
872
403
|
case 112:
|
|
873
|
-
|
|
404
|
+
l = 114;
|
|
874
405
|
break;
|
|
875
406
|
case 117:
|
|
876
|
-
|
|
407
|
+
l = 121;
|
|
877
408
|
break;
|
|
878
409
|
case 135:
|
|
879
|
-
|
|
410
|
+
l = 139;
|
|
880
411
|
break;
|
|
881
412
|
case 169:
|
|
882
|
-
|
|
413
|
+
l = 173;
|
|
883
414
|
break;
|
|
884
415
|
case 203:
|
|
885
|
-
|
|
416
|
+
l = 207;
|
|
886
417
|
break;
|
|
887
418
|
case 293:
|
|
888
|
-
|
|
419
|
+
l = 297;
|
|
889
420
|
break;
|
|
890
421
|
case 337:
|
|
891
|
-
|
|
422
|
+
l = 342;
|
|
892
423
|
break;
|
|
893
424
|
}
|
|
894
|
-
const f =
|
|
895
|
-
return Math.ceil(
|
|
425
|
+
const f = a > 180 ? 6 : a > 160 ? 5 : a > 110 ? 4 : 3;
|
|
426
|
+
return Math.ceil(l * r[o - 1] * f / 100);
|
|
896
427
|
} else {
|
|
897
428
|
const f = c.option(n.incMAD).base;
|
|
898
|
-
if (
|
|
899
|
-
const
|
|
900
|
-
return Math.ceil(
|
|
429
|
+
if (s === u.MAD && f >= l && (l = f), h) {
|
|
430
|
+
const m = a > 160 ? 18 : a > 150 ? 15 : a > 110 ? 12 : 9;
|
|
431
|
+
return Math.ceil(l * r[o - 1] * m / 100);
|
|
901
432
|
} else {
|
|
902
|
-
const
|
|
903
|
-
return Math.ceil(
|
|
433
|
+
const m = a > 110 ? 4 : 3;
|
|
434
|
+
return Math.ceil(l * r[o - 1] * m / 100);
|
|
904
435
|
}
|
|
905
436
|
}
|
|
906
|
-
} else if (
|
|
437
|
+
} else if (a < 60)
|
|
907
438
|
return 0;
|
|
908
|
-
return
|
|
439
|
+
return o;
|
|
909
440
|
case u.MHP:
|
|
910
441
|
case u.MMP:
|
|
911
|
-
return Math.floor(
|
|
442
|
+
return Math.floor(a / 10) * 30 * o;
|
|
912
443
|
case u.speed:
|
|
913
444
|
case u.jump:
|
|
914
|
-
return
|
|
445
|
+
return M.isWeapon(e) ? 0 : o;
|
|
915
446
|
case u.damR:
|
|
916
|
-
return
|
|
447
|
+
return M.isWeapon(e) ? o : 0;
|
|
917
448
|
case u.bdR:
|
|
918
|
-
return
|
|
449
|
+
return a < 90 || !M.isWeapon(e) ? 0 : 2 * o;
|
|
919
450
|
case u.allStatR:
|
|
920
|
-
return
|
|
451
|
+
return a < 70 && !M.isWeapon(e) ? 0 : o;
|
|
921
452
|
case u.reduceReq:
|
|
922
|
-
return Math.min(5 *
|
|
453
|
+
return Math.min(5 * o, a);
|
|
923
454
|
default:
|
|
924
455
|
return 0;
|
|
925
456
|
}
|
|
@@ -990,66 +521,66 @@ const D = class {
|
|
|
990
521
|
if (t.star >= t.maxStar && !c || t.star >= D.MAX_STARFORCE)
|
|
991
522
|
return !1;
|
|
992
523
|
t.star += 1;
|
|
993
|
-
const
|
|
524
|
+
const s = t.star, o = D.getStatData(t, !1, !1), a = D.getStatData(t, !1, !0), h = M.isWeapon(t.type) || t.type === i.katara, e = [
|
|
994
525
|
[n.incSTR, n.incDEX],
|
|
995
526
|
[n.incINT, n.incLUK],
|
|
996
527
|
[n.incDEX, n.incSTR],
|
|
997
528
|
[n.incLUK, n.incDEX],
|
|
998
529
|
[n.incSTR, n.incDEX]
|
|
999
|
-
],
|
|
530
|
+
], r = [
|
|
1000
531
|
n.incSTR,
|
|
1001
532
|
n.incDEX,
|
|
1002
533
|
n.incINT,
|
|
1003
534
|
n.incLUK
|
|
1004
535
|
];
|
|
1005
|
-
let
|
|
536
|
+
let l;
|
|
1006
537
|
const f = t.req.job;
|
|
1007
538
|
if (f === 0)
|
|
1008
|
-
|
|
539
|
+
l = /* @__PURE__ */ new Set([
|
|
1009
540
|
n.incSTR,
|
|
1010
541
|
n.incDEX,
|
|
1011
542
|
n.incINT,
|
|
1012
543
|
n.incLUK
|
|
1013
544
|
]);
|
|
1014
545
|
else {
|
|
1015
|
-
|
|
1016
|
-
for (let
|
|
1017
|
-
if (f & 1 <<
|
|
1018
|
-
for (const
|
|
1019
|
-
|
|
546
|
+
l = /* @__PURE__ */ new Set();
|
|
547
|
+
for (let d = 0; d < 5; d++)
|
|
548
|
+
if (f & 1 << d)
|
|
549
|
+
for (const A of e[d])
|
|
550
|
+
l.add(A);
|
|
1020
551
|
}
|
|
1021
|
-
for (const
|
|
1022
|
-
(
|
|
1023
|
-
if (
|
|
1024
|
-
const
|
|
1025
|
-
if (
|
|
1026
|
-
t.option(n.incPAD).enchant +=
|
|
552
|
+
for (const d of r)
|
|
553
|
+
(l.has(d) || s > 15 && (t.option(d).base > 0 || t.option(d).upgrade > 0)) && (t.option(d).enchant += o[s]);
|
|
554
|
+
if (h) {
|
|
555
|
+
const d = f === 0 || Math.floor(f / 2) % 2 === 1 || t.option(n.incMAD).upgrade > 0;
|
|
556
|
+
if (s > 15)
|
|
557
|
+
t.option(n.incPAD).enchant += a[s], d && (t.option(n.incMAD).enchant += a[s]);
|
|
1027
558
|
else {
|
|
1028
|
-
const
|
|
1029
|
-
if (t.option(n.incPAD).enchant += Math.floor(
|
|
1030
|
-
const
|
|
1031
|
-
t.option(n.incMAD).enchant += Math.floor(
|
|
559
|
+
const A = t.option(n.incPAD).sum - t.option(n.incPAD).bonus;
|
|
560
|
+
if (t.option(n.incPAD).enchant += Math.floor(A / 50) + 1, d) {
|
|
561
|
+
const S = t.option(n.incMAD).sum - t.option(n.incMAD).bonus;
|
|
562
|
+
t.option(n.incMAD).enchant += Math.floor(S / 50) + 1;
|
|
1032
563
|
}
|
|
1033
564
|
}
|
|
1034
565
|
} else
|
|
1035
|
-
t.option(n.incPAD).enchant +=
|
|
1036
|
-
if (!
|
|
1037
|
-
const
|
|
1038
|
-
t.option(n.incPDD).enchant += Math.floor(
|
|
566
|
+
t.option(n.incPAD).enchant += a[s], t.option(n.incMAD).enchant += a[s], t.type === i.glove && (f === 0 ? (t.option(n.incPAD).enchant += D.starforceGloveBonusAttData[s], t.option(n.incMAD).enchant += D.starforceGloveBonusAttData[s]) : Math.floor(f / 2) % 2 === 1 ? t.option(n.incMAD).enchant += D.starforceGloveBonusAttData[s] : t.option(n.incPAD).enchant += D.starforceGloveBonusAttData[s]);
|
|
567
|
+
if (!h && t.type !== i.machineHeart) {
|
|
568
|
+
const d = t.option(n.incPDD).sum - t.option(n.incPDD).bonus;
|
|
569
|
+
t.option(n.incPDD).enchant += Math.floor(d / 20) + 1;
|
|
1039
570
|
}
|
|
1040
|
-
const
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
571
|
+
const m = [
|
|
572
|
+
i.cap,
|
|
573
|
+
i.coat,
|
|
574
|
+
i.longcoat,
|
|
575
|
+
i.pants,
|
|
576
|
+
i.cape,
|
|
577
|
+
i.ring,
|
|
578
|
+
i.pendant,
|
|
579
|
+
i.belt,
|
|
580
|
+
i.shoulder,
|
|
581
|
+
i.shield
|
|
1051
582
|
];
|
|
1052
|
-
return
|
|
583
|
+
return h ? (t.option(n.incMHP).enchant += D.starforceMhpData[s], t.option(n.incMMP).enchant += D.starforceMhpData[s]) : m.includes(t.type) && (t.option(n.incMHP).enchant += D.starforceMhpData[s]), t.type === i.shoes && (t.option(n.incSpeed).enchant += D.starforceSpeedJumpData[s], t.option(n.incJump).enchant += D.starforceSpeedJumpData[s]), !0;
|
|
1053
584
|
}
|
|
1054
585
|
/**
|
|
1055
586
|
* 슈페리얼 장비에 스타포스 강화를 1회 적용합니다.
|
|
@@ -1058,19 +589,19 @@ const D = class {
|
|
|
1058
589
|
if (t.star >= t.maxStar)
|
|
1059
590
|
return !1;
|
|
1060
591
|
t.star += 1;
|
|
1061
|
-
const c = t.star,
|
|
592
|
+
const c = t.star, s = D.getStatData(t, !1, !1), o = D.getStatData(t, !1, !0), a = [
|
|
1062
593
|
n.incSTR,
|
|
1063
594
|
n.incDEX,
|
|
1064
595
|
n.incINT,
|
|
1065
596
|
n.incLUK
|
|
1066
597
|
];
|
|
1067
|
-
for (const
|
|
1068
|
-
t.option(
|
|
1069
|
-
const
|
|
1070
|
-
for (const
|
|
1071
|
-
t.option(
|
|
1072
|
-
const
|
|
1073
|
-
return t.option(n.incPDD).enchant += Math.floor(
|
|
598
|
+
for (const r of a)
|
|
599
|
+
t.option(r).base > 0 && (t.option(r).enchant += s[c]);
|
|
600
|
+
const h = [n.incPAD, n.incMAD];
|
|
601
|
+
for (const r of h)
|
|
602
|
+
t.option(r).base > 0 && (t.option(r).enchant += o[c]);
|
|
603
|
+
const e = t.option(n.incPDD).sum - t.option(n.incPDD).bonus;
|
|
604
|
+
return t.option(n.incPDD).enchant += Math.floor(e / 20) + 1, !0;
|
|
1074
605
|
}
|
|
1075
606
|
/**
|
|
1076
607
|
* 장비에 놀라운 장비강화 주문서를 1회 적용합니다.
|
|
@@ -1085,31 +616,31 @@ const D = class {
|
|
|
1085
616
|
* - 주무기, 블레이드, 방패: 공격력, 마력 +1
|
|
1086
617
|
* @returns 성공했을 경우 `true`; 아닐 경우 `false`
|
|
1087
618
|
*/
|
|
1088
|
-
addAmazingEnhancement(t, c = !1,
|
|
1089
|
-
if (t.getBooleanValue(n.incCHUC) || t.getBooleanValue(n.superiorEqp) || t.star >= t.maxStar && !
|
|
619
|
+
addAmazingEnhancement(t, c = !1, s = !1) {
|
|
620
|
+
if (t.getBooleanValue(n.incCHUC) || t.getBooleanValue(n.superiorEqp) || t.star >= t.maxStar && !s || t.star >= D.MAX_AMAZING)
|
|
1090
621
|
return !1;
|
|
1091
622
|
t.amazing || (t.amazing = !0, t.maxStar = Math.min(t.maxStar, D.MAX_AMAZING)), t.star += 1;
|
|
1092
|
-
const
|
|
623
|
+
const o = t.star, a = D.getStatData(t, !0, !1), h = D.getStatData(t, !0, !0), e = M.isWeapon(t.type) || t.type === i.katara, r = [
|
|
1093
624
|
n.incSTR,
|
|
1094
625
|
n.incDEX,
|
|
1095
626
|
n.incINT,
|
|
1096
627
|
n.incLUK
|
|
1097
628
|
];
|
|
1098
|
-
for (const
|
|
1099
|
-
if (t.option(
|
|
1100
|
-
let
|
|
1101
|
-
c &&
|
|
629
|
+
for (const m of r)
|
|
630
|
+
if (t.option(m).sum > 0) {
|
|
631
|
+
let A = a[o];
|
|
632
|
+
c && M.isAccessory(t.type) && (A += o > 5 ? 2 : 1), t.option(m).enchant += A;
|
|
1102
633
|
}
|
|
1103
|
-
const
|
|
1104
|
-
for (const
|
|
1105
|
-
const
|
|
1106
|
-
if (
|
|
1107
|
-
|
|
1108
|
-
let
|
|
1109
|
-
c && (
|
|
634
|
+
const l = [n.incPAD, n.incMAD];
|
|
635
|
+
for (const m of l) {
|
|
636
|
+
const d = t.option(m).sum;
|
|
637
|
+
if (d > 0) {
|
|
638
|
+
e && (t.option(m).enchant += Math.floor(d / 50) + 1);
|
|
639
|
+
let A = h[o];
|
|
640
|
+
c && (e || t.type === i.shield) && (A += 1), t.option(m).enchant += A;
|
|
1110
641
|
}
|
|
1111
642
|
}
|
|
1112
|
-
c &&
|
|
643
|
+
c && M.isArmor(t.type) && (t.option(n.incMHP).enchant += 50);
|
|
1113
644
|
const f = t.option(n.incPDD).sum;
|
|
1114
645
|
return t.option(n.incPDD).enchant += Math.floor(f / 20) + 1, !0;
|
|
1115
646
|
}
|
|
@@ -1121,7 +652,7 @@ const D = class {
|
|
|
1121
652
|
resetEnhancement(t) {
|
|
1122
653
|
if (t.getBooleanValue(n.incCHUC))
|
|
1123
654
|
return !1;
|
|
1124
|
-
t.star = 0, t.amazing = !1, t.maxStar =
|
|
655
|
+
t.star = 0, t.amazing = !1, t.maxStar = M.getMaxStar(t);
|
|
1125
656
|
for (const [, c] of t.options)
|
|
1126
657
|
c.enchant = 0;
|
|
1127
658
|
return !0;
|
|
@@ -1138,37 +669,37 @@ const D = class {
|
|
|
1138
669
|
return !1;
|
|
1139
670
|
const c = t.star;
|
|
1140
671
|
this.resetEnhancement(t);
|
|
1141
|
-
for (let
|
|
672
|
+
for (let s = 0; s < c; s++)
|
|
1142
673
|
this.addStarforce(t, !0);
|
|
1143
674
|
return !0;
|
|
1144
675
|
}
|
|
1145
|
-
static getStatData(t, c,
|
|
1146
|
-
let
|
|
1147
|
-
t.getBooleanValue(n.superiorEqp) ?
|
|
1148
|
-
const
|
|
1149
|
-
for (const
|
|
1150
|
-
if (
|
|
1151
|
-
return
|
|
676
|
+
static getStatData(t, c, s) {
|
|
677
|
+
let o;
|
|
678
|
+
t.getBooleanValue(n.superiorEqp) ? s ? o = this.superiorAttData : o = this.superiorStatData : c ? s ? o = this.amazingAttData : o = this.amazingStatData : s ? M.isWeapon(t.type) || t.type === i.katara ? o = this.starforceWeaponAttData : o = this.starforceAttData : o = this.starforceStatData;
|
|
679
|
+
const a = t.req.level;
|
|
680
|
+
for (const h of [...o].reverse())
|
|
681
|
+
if (a >= h[0])
|
|
682
|
+
return h;
|
|
1152
683
|
throw Error(`Gear has invalid reqLevel.
|
|
1153
684
|
` + t);
|
|
1154
685
|
}
|
|
1155
686
|
/* eslint-enable prettier/prettier */
|
|
1156
687
|
};
|
|
1157
|
-
let
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
688
|
+
let R = D;
|
|
689
|
+
R.MAX_STARFORCE = 25;
|
|
690
|
+
R.MAX_AMAZING = 15;
|
|
691
|
+
R.superiorAttData = [
|
|
1161
692
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1162
693
|
[110, 0, 0, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0],
|
|
1163
694
|
[150, 0, 0, 0, 0, 0, 9, 10, 11, 12, 13, 15, 17, 19, 21, 23]
|
|
1164
695
|
];
|
|
1165
|
-
|
|
696
|
+
R.superiorStatData = [
|
|
1166
697
|
[0, 1, 2, 4, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1167
698
|
[80, 2, 3, 5, 8, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1168
699
|
[110, 9, 10, 12, 15, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1169
700
|
[150, 19, 20, 22, 25, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
1170
701
|
];
|
|
1171
|
-
|
|
702
|
+
R.starforceWeaponAttData = [
|
|
1172
703
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1173
704
|
[108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 6, 7, 8, 9, 27, 28, 29],
|
|
1174
705
|
[118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 7, 8, 9, 10, 28, 29, 30],
|
|
@@ -1179,7 +710,7 @@ g.starforceWeaponAttData = [
|
|
|
1179
710
|
[198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 14, 14, 15, 16, 17, 34, 35, 36],
|
|
1180
711
|
[248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 16, 16, 17, 18, 19, 36, 37, 38]
|
|
1181
712
|
];
|
|
1182
|
-
|
|
713
|
+
R.starforceAttData = [
|
|
1183
714
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1184
715
|
[108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 12, 13, 15, 17],
|
|
1185
716
|
[118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18],
|
|
@@ -1190,7 +721,7 @@ g.starforceAttData = [
|
|
|
1190
721
|
[198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 14, 15, 16, 17, 19, 21, 23, 25],
|
|
1191
722
|
[248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 21, 23, 25, 27]
|
|
1192
723
|
];
|
|
1193
|
-
|
|
724
|
+
R.starforceStatData = [
|
|
1194
725
|
[0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1195
726
|
[108, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
|
|
1196
727
|
[118, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0],
|
|
@@ -1201,7 +732,7 @@ g.starforceStatData = [
|
|
|
1201
732
|
[198, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0],
|
|
1202
733
|
[248, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0]
|
|
1203
734
|
];
|
|
1204
|
-
|
|
735
|
+
R.amazingAttData = [
|
|
1205
736
|
[0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14],
|
|
1206
737
|
[80, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 9, 11, 13, 15],
|
|
1207
738
|
[90, 0, 0, 0, 0, 0, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16],
|
|
@@ -1212,7 +743,7 @@ g.amazingAttData = [
|
|
|
1212
743
|
[140, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 15, 17, 19, 21],
|
|
1213
744
|
[150, 0, 0, 0, 0, 0, 9, 10, 11, 12, 13, 14, 16, 18, 20, 22]
|
|
1214
745
|
];
|
|
1215
|
-
|
|
746
|
+
R.amazingStatData = [
|
|
1216
747
|
[0, 1, 2, 4, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1217
748
|
[80, 2, 3, 5, 8, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1218
749
|
[85, 3, 4, 6, 9, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
@@ -1230,7 +761,7 @@ g.amazingStatData = [
|
|
|
1230
761
|
[145, 18, 19, 21, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
1231
762
|
[150, 19, 20, 22, 25, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
1232
763
|
];
|
|
1233
|
-
|
|
764
|
+
R.starforceGloveBonusAttData = [
|
|
1234
765
|
0,
|
|
1235
766
|
0,
|
|
1236
767
|
0,
|
|
@@ -1258,7 +789,7 @@ g.starforceGloveBonusAttData = [
|
|
|
1258
789
|
0,
|
|
1259
790
|
0
|
|
1260
791
|
];
|
|
1261
|
-
|
|
792
|
+
R.starforceMhpData = [
|
|
1262
793
|
0,
|
|
1263
794
|
5,
|
|
1264
795
|
5,
|
|
@@ -1286,7 +817,7 @@ g.starforceMhpData = [
|
|
|
1286
817
|
0,
|
|
1287
818
|
0
|
|
1288
819
|
];
|
|
1289
|
-
|
|
820
|
+
R.starforceSpeedJumpData = [
|
|
1290
821
|
0,
|
|
1291
822
|
0,
|
|
1292
823
|
0,
|
|
@@ -1314,197 +845,261 @@ g.starforceSpeedJumpData = [
|
|
|
1314
845
|
0,
|
|
1315
846
|
0
|
|
1316
847
|
];
|
|
1317
|
-
class
|
|
1318
|
-
constructor(c = "",
|
|
1319
|
-
this.name = c, this.stat =
|
|
848
|
+
class w {
|
|
849
|
+
constructor(c = "", s) {
|
|
850
|
+
this.name = c, this.stat = s ?? /* @__PURE__ */ new Map();
|
|
1320
851
|
}
|
|
1321
852
|
/**
|
|
1322
853
|
* 주문의 흔적 `Scroll`을 반환합니다.
|
|
1323
854
|
* @param gear 적용할 장비
|
|
1324
|
-
* @param type 주문의 흔적 스탯
|
|
1325
|
-
*
|
|
855
|
+
* @param type 주문의 흔적 스탯 종류; 다음 값 중 하나입니다:
|
|
856
|
+
*
|
|
857
|
+
* `GearPropType.incSTR` / `GearPropType.incDEX` /
|
|
858
|
+
* `GearPropType.incINT` / `GearPropType.incLUK` /
|
|
859
|
+
* `GearPropType.incAllStat` / `GearPropType.incMHP`
|
|
860
|
+
* @param probability 주문의 흔적 성공 확률 %; 다음 값 중 하나입니다:
|
|
861
|
+
*
|
|
862
|
+
* `100` / `70` / `30` / `15`
|
|
1326
863
|
* @returns 주문의 흔적 `Scroll`; 존재하지 않을 경우 `undefined`
|
|
1327
864
|
*/
|
|
1328
|
-
static getSpellTraceScroll(c,
|
|
1329
|
-
const
|
|
1330
|
-
let
|
|
1331
|
-
const
|
|
1332
|
-
switch (
|
|
865
|
+
static getSpellTraceScroll(c, s, o) {
|
|
866
|
+
const a = s === n.incINT ? n.incMAD : n.incPAD, h = c.req.level >= 115 ? 2 : c.req.level >= 75 ? 1 : 0;
|
|
867
|
+
let e;
|
|
868
|
+
const r = a === n.incMAD ? "마력" : "공격력";
|
|
869
|
+
switch (s) {
|
|
1333
870
|
case n.incSTR:
|
|
1334
|
-
|
|
871
|
+
e = "힘";
|
|
1335
872
|
break;
|
|
1336
873
|
case n.incDEX:
|
|
1337
|
-
|
|
874
|
+
e = "민첩";
|
|
1338
875
|
break;
|
|
1339
876
|
case n.incINT:
|
|
1340
|
-
|
|
877
|
+
e = "지력";
|
|
1341
878
|
break;
|
|
1342
879
|
case n.incLUK:
|
|
1343
|
-
|
|
880
|
+
e = "운";
|
|
1344
881
|
break;
|
|
1345
882
|
case n.incAllStat:
|
|
1346
|
-
|
|
883
|
+
e = "올스탯";
|
|
1347
884
|
break;
|
|
1348
885
|
case n.incMHP:
|
|
1349
|
-
|
|
886
|
+
e = "체력";
|
|
1350
887
|
break;
|
|
1351
888
|
}
|
|
1352
|
-
if (
|
|
1353
|
-
if (
|
|
889
|
+
if (M.isWeapon(c.type) || c.type === i.katara) {
|
|
890
|
+
if (s === n.incAllStat)
|
|
1354
891
|
return;
|
|
1355
|
-
let
|
|
1356
|
-
switch (
|
|
892
|
+
let l;
|
|
893
|
+
switch (o) {
|
|
1357
894
|
case 100:
|
|
1358
|
-
|
|
895
|
+
l = [
|
|
1359
896
|
[1, 0],
|
|
1360
897
|
[2, 0],
|
|
1361
898
|
[3, 1]
|
|
1362
899
|
];
|
|
1363
900
|
break;
|
|
1364
901
|
case 70:
|
|
1365
|
-
|
|
902
|
+
l = [
|
|
1366
903
|
[2, 0],
|
|
1367
904
|
[3, 1],
|
|
1368
905
|
[5, 2]
|
|
1369
906
|
];
|
|
1370
907
|
break;
|
|
1371
908
|
case 30:
|
|
1372
|
-
|
|
909
|
+
l = [
|
|
1373
910
|
[3, 1],
|
|
1374
911
|
[5, 2],
|
|
1375
912
|
[7, 3]
|
|
1376
913
|
];
|
|
1377
914
|
break;
|
|
1378
915
|
case 15:
|
|
1379
|
-
|
|
916
|
+
l = [
|
|
1380
917
|
[5, 2],
|
|
1381
918
|
[7, 3],
|
|
1382
919
|
[9, 4]
|
|
1383
920
|
];
|
|
1384
921
|
break;
|
|
1385
922
|
}
|
|
1386
|
-
const f =
|
|
1387
|
-
[
|
|
1388
|
-
[
|
|
923
|
+
const f = l[h][0], m = l[h][1] * (s === n.incMHP ? 50 : 1), d = m > 0 ? `${o}% ${r}(${e}) 주문서` : `${o}% ${r} 주문서`, A = /* @__PURE__ */ new Map([
|
|
924
|
+
[s, m],
|
|
925
|
+
[a, f]
|
|
1389
926
|
]);
|
|
1390
|
-
return new
|
|
1391
|
-
} else if (
|
|
927
|
+
return new w(d, A);
|
|
928
|
+
} else if (o === 15)
|
|
1392
929
|
return;
|
|
1393
|
-
if (c.type ===
|
|
1394
|
-
let
|
|
1395
|
-
switch (
|
|
930
|
+
if (c.type === i.glove) {
|
|
931
|
+
let l;
|
|
932
|
+
switch (o) {
|
|
1396
933
|
case 100:
|
|
1397
|
-
|
|
934
|
+
l = [0, 1, 1];
|
|
1398
935
|
break;
|
|
1399
936
|
case 70:
|
|
1400
|
-
|
|
937
|
+
l = [1, 2, 2];
|
|
1401
938
|
break;
|
|
1402
939
|
case 30:
|
|
1403
|
-
|
|
940
|
+
l = [2, 3, 3];
|
|
1404
941
|
break;
|
|
1405
942
|
}
|
|
1406
|
-
const f =
|
|
1407
|
-
let
|
|
1408
|
-
return f === 0 ? (
|
|
943
|
+
const f = l[h];
|
|
944
|
+
let m, d;
|
|
945
|
+
return f === 0 ? (m = `${o}% 방어력 주문서`, d = /* @__PURE__ */ new Map([[n.incPDD, 3]])) : (m = `${o}% ${r} 주문서`, d = /* @__PURE__ */ new Map([[a, f]])), new w(m, d);
|
|
1409
946
|
}
|
|
1410
|
-
if (
|
|
1411
|
-
if (
|
|
1412
|
-
if (
|
|
947
|
+
if (M.isArmor(c.type) || c.type === i.shoulder) {
|
|
948
|
+
if (s === n.incAllStat) {
|
|
949
|
+
if (o !== 30)
|
|
1413
950
|
return;
|
|
1414
|
-
const
|
|
951
|
+
const k = [
|
|
1415
952
|
[1, 30, 4],
|
|
1416
953
|
[2, 70, 7],
|
|
1417
954
|
[3, 120, 10]
|
|
1418
|
-
],
|
|
1419
|
-
[n.incSTR,
|
|
1420
|
-
[n.incDEX,
|
|
1421
|
-
[n.incINT,
|
|
1422
|
-
[n.incLUK,
|
|
1423
|
-
[n.incMHP,
|
|
955
|
+
], b = k[h][0], L = k[h][1], H = k[h][2], N = `${o}% ${e} 주문서`, E = /* @__PURE__ */ new Map([
|
|
956
|
+
[n.incSTR, b],
|
|
957
|
+
[n.incDEX, b],
|
|
958
|
+
[n.incINT, b],
|
|
959
|
+
[n.incLUK, b],
|
|
960
|
+
[n.incMHP, L],
|
|
1424
961
|
[n.incPDD, H]
|
|
1425
962
|
]);
|
|
1426
|
-
return c.upgradeCount === 3 && (c.req.job === 0 ? (
|
|
963
|
+
return c.upgradeCount === 3 && (c.req.job === 0 ? (E.set(n.incMAD, 1), E.set(n.incPAD, 1)) : Math.floor(c.req.job / 2) % 2 === 1 ? E.set(n.incMAD, 1) : E.set(n.incPAD, 1)), new w(N, E);
|
|
1427
964
|
}
|
|
1428
|
-
let
|
|
1429
|
-
switch (
|
|
965
|
+
let l;
|
|
966
|
+
switch (o) {
|
|
1430
967
|
case 100:
|
|
1431
|
-
|
|
968
|
+
l = [
|
|
1432
969
|
[1, 5, 1],
|
|
1433
970
|
[2, 20, 2],
|
|
1434
971
|
[3, 30, 3]
|
|
1435
972
|
];
|
|
1436
973
|
break;
|
|
1437
974
|
case 70:
|
|
1438
|
-
|
|
975
|
+
l = [
|
|
1439
976
|
[2, 15, 2],
|
|
1440
977
|
[3, 40, 4],
|
|
1441
978
|
[4, 70, 5]
|
|
1442
979
|
];
|
|
1443
980
|
break;
|
|
1444
981
|
case 30:
|
|
1445
|
-
|
|
982
|
+
l = [
|
|
1446
983
|
[3, 30, 4],
|
|
1447
984
|
[5, 70, 7],
|
|
1448
985
|
[7, 120, 10]
|
|
1449
986
|
];
|
|
1450
987
|
break;
|
|
1451
988
|
}
|
|
1452
|
-
const f =
|
|
1453
|
-
[n.incMHP,
|
|
1454
|
-
[n.incPDD,
|
|
989
|
+
const f = s !== n.incMHP ? l[h][0] : 0, m = l[h][1] + (s === n.incMHP ? l[h][0] * 50 : 0), d = l[h][2], A = `${o}% ${e} 주문서`, S = /* @__PURE__ */ new Map([
|
|
990
|
+
[n.incMHP, m],
|
|
991
|
+
[n.incPDD, d]
|
|
1455
992
|
]);
|
|
1456
|
-
return f > 0 &&
|
|
993
|
+
return f > 0 && S.set(s, f), c.upgradeCount === 3 && (c.req.job === 0 ? (S.set(n.incMAD, 1), S.set(n.incPAD, 1)) : Math.floor(c.req.job / 2) % 2 === 1 ? S.set(n.incMAD, 1) : S.set(n.incPAD, 1)), new w(A, S);
|
|
1457
994
|
}
|
|
1458
|
-
if (
|
|
1459
|
-
if (
|
|
1460
|
-
if (
|
|
995
|
+
if (M.isAccessory(c.type)) {
|
|
996
|
+
if (s === n.incAllStat) {
|
|
997
|
+
if (o !== 30)
|
|
1461
998
|
return;
|
|
1462
|
-
const
|
|
999
|
+
const S = [
|
|
1463
1000
|
[1, 30, 4],
|
|
1464
1001
|
[2, 70, 7],
|
|
1465
1002
|
[3, 120, 10]
|
|
1466
|
-
][
|
|
1467
|
-
[n.incSTR,
|
|
1468
|
-
[n.incDEX,
|
|
1469
|
-
[n.incINT,
|
|
1470
|
-
[n.incLUK,
|
|
1003
|
+
][h][0], k = `${o}% ${e} 주문서`, b = /* @__PURE__ */ new Map([
|
|
1004
|
+
[n.incSTR, S],
|
|
1005
|
+
[n.incDEX, S],
|
|
1006
|
+
[n.incINT, S],
|
|
1007
|
+
[n.incLUK, S]
|
|
1471
1008
|
]);
|
|
1472
|
-
return new
|
|
1009
|
+
return new w(k, b);
|
|
1473
1010
|
}
|
|
1474
|
-
let
|
|
1475
|
-
switch (
|
|
1011
|
+
let l;
|
|
1012
|
+
switch (o) {
|
|
1476
1013
|
case 100:
|
|
1477
|
-
|
|
1014
|
+
l = [1, 1, 2];
|
|
1478
1015
|
break;
|
|
1479
1016
|
case 70:
|
|
1480
|
-
|
|
1017
|
+
l = [2, 2, 3];
|
|
1481
1018
|
break;
|
|
1482
1019
|
case 30:
|
|
1483
|
-
|
|
1020
|
+
l = [3, 4, 5];
|
|
1484
1021
|
break;
|
|
1485
1022
|
}
|
|
1486
|
-
const f =
|
|
1487
|
-
return new
|
|
1023
|
+
const f = l[h] * (s === n.incMHP ? 50 : 1), m = `${o}% ${e} 주문서`, d = /* @__PURE__ */ new Map([[s, f]]);
|
|
1024
|
+
return new w(m, d);
|
|
1488
1025
|
}
|
|
1489
|
-
if (c.type ===
|
|
1490
|
-
let
|
|
1491
|
-
switch (
|
|
1026
|
+
if (c.type === i.machineHeart) {
|
|
1027
|
+
let l;
|
|
1028
|
+
switch (o) {
|
|
1492
1029
|
case 100:
|
|
1493
|
-
|
|
1030
|
+
l = [1, 2, 3];
|
|
1494
1031
|
break;
|
|
1495
1032
|
case 70:
|
|
1496
|
-
|
|
1033
|
+
l = [2, 3, 5];
|
|
1497
1034
|
break;
|
|
1498
1035
|
case 30:
|
|
1499
|
-
|
|
1036
|
+
l = [3, 5, 7];
|
|
1500
1037
|
break;
|
|
1501
1038
|
}
|
|
1502
|
-
const f =
|
|
1503
|
-
return new
|
|
1039
|
+
const f = l[h], m = `${o}% ${e} 주문서`, d = /* @__PURE__ */ new Map([[a, f]]);
|
|
1040
|
+
return new w(m, d);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
class W {
|
|
1045
|
+
/**
|
|
1046
|
+
* 무기를 소울웨폰으로 변환합니다.
|
|
1047
|
+
* @param gear 적용할 장비
|
|
1048
|
+
* @returns 소울웨폰으로 변환되었을 경우 `true`; 아닐 경우 `false`
|
|
1049
|
+
*/
|
|
1050
|
+
enchant(c) {
|
|
1051
|
+
return c.soulSlot.enchanted || !M.isWeapon(c.type) ? !1 : (c.soulSlot.enchanted = !0, c.soulSlot.soul = void 0, c.soulSlot.charge = 0, c.soulSlot.chargeOption.clear(), !0);
|
|
1052
|
+
}
|
|
1053
|
+
/**
|
|
1054
|
+
* 소울웨폰을 원래의 무기로 되돌립니다.
|
|
1055
|
+
* @param gear 되돌릴 장비
|
|
1056
|
+
* @returns 되돌렸을 경우 `true`; 아닐 경우 `false`
|
|
1057
|
+
*/
|
|
1058
|
+
disenchant(c) {
|
|
1059
|
+
return c.soulSlot.enchanted ? (c.soulSlot.enchanted = !1, c.soulSlot.soul = void 0, c.soulSlot.charge = 0, c.soulSlot.chargeOption.clear(), !0) : !1;
|
|
1060
|
+
}
|
|
1061
|
+
/**
|
|
1062
|
+
* 소울웨폰에 소울을 장착합니다.
|
|
1063
|
+
* @param gear 소울을 장착할 장비
|
|
1064
|
+
* @param soul 장착할 소울
|
|
1065
|
+
* @returns 장착했을 경우 `true`; 아닐 경우 `false`
|
|
1066
|
+
*/
|
|
1067
|
+
setSoul(c, s) {
|
|
1068
|
+
return c.soulSlot.enchanted ? (c.soulSlot.soul = s, this.setCharge(c, c.soulSlot.charge), !0) : !1;
|
|
1069
|
+
}
|
|
1070
|
+
/**
|
|
1071
|
+
* 소울이 장착된 소울웨폰에서 소울을 제거합니다.
|
|
1072
|
+
* @param gear 소울을 제거할 장비
|
|
1073
|
+
* @returns 제거했을 경우 `true`; 아닐 경우 `false`
|
|
1074
|
+
*/
|
|
1075
|
+
removeSoul(c) {
|
|
1076
|
+
return !c.soulSlot.enchanted || !c.soulSlot.soul ? !1 : (c.soulSlot.soul = void 0, this.setCharge(c, c.soulSlot.charge), !0);
|
|
1077
|
+
}
|
|
1078
|
+
/**
|
|
1079
|
+
* 소울웨폰의 소울 충전량을 설정하고 옵션을 적용합니다.
|
|
1080
|
+
* 0부터 1000까지의 값으로 설정할 수 있습니다.
|
|
1081
|
+
* @param gear 소울 충전량을 설정할 장비
|
|
1082
|
+
* @param charge 소울 충전량
|
|
1083
|
+
* @returns 적용했을 경우 `true`; 아닐 경우 `false`
|
|
1084
|
+
*/
|
|
1085
|
+
setCharge(c, s) {
|
|
1086
|
+
if (!c.soulSlot.enchanted || s < 0 || s > 1e3)
|
|
1087
|
+
return !1;
|
|
1088
|
+
c.soulSlot.charge = s;
|
|
1089
|
+
const a = c.option(n.incPAD).base < c.option(n.incMAD).base ? n.incMAD : n.incPAD;
|
|
1090
|
+
return c.soulSlot.chargeOption.clear(), c.soulSlot.chargeOption.set(a, this.getChargeAD(c.soulSlot)), !0;
|
|
1091
|
+
}
|
|
1092
|
+
getChargeAD(c) {
|
|
1093
|
+
if (!c.enchanted)
|
|
1094
|
+
return 0;
|
|
1095
|
+
if (c.soul) {
|
|
1096
|
+
const s = c.soul.multiplier;
|
|
1097
|
+
return 10 + Math.min(Math.ceil(c.charge / 100), 5) * s;
|
|
1504
1098
|
}
|
|
1099
|
+
return 5 + Math.min(Math.ceil(c.charge / 100), 5);
|
|
1505
1100
|
}
|
|
1506
1101
|
}
|
|
1507
|
-
class
|
|
1102
|
+
class x {
|
|
1508
1103
|
/**
|
|
1509
1104
|
* 장비에 황금망치를 적용합니다.
|
|
1510
1105
|
* @param gear 황금망치를 적용할 장비
|
|
@@ -1515,49 +1110,50 @@ class O {
|
|
|
1515
1110
|
}
|
|
1516
1111
|
/**
|
|
1517
1112
|
* 장비에 주문서를 1회 적용합니다.
|
|
1518
|
-
*
|
|
1519
1113
|
* @param gear 주문서를 적용할 장비
|
|
1520
1114
|
* @param scroll 적용할 주문서
|
|
1521
1115
|
* @returns 주문서가 적용됐을 경우 `true`; 아닐 경우 `false`
|
|
1522
1116
|
*/
|
|
1523
|
-
applyScroll(c,
|
|
1524
|
-
if (c.
|
|
1117
|
+
applyScroll(c, s) {
|
|
1118
|
+
if (c.upgradeCountLeft < 1)
|
|
1525
1119
|
return !1;
|
|
1526
1120
|
c.upgradeCount += 1;
|
|
1527
|
-
for (const [
|
|
1528
|
-
c.option(
|
|
1121
|
+
for (const [o, a] of s.stat)
|
|
1122
|
+
c.option(o).upgrade += a;
|
|
1529
1123
|
return !0;
|
|
1530
1124
|
}
|
|
1531
1125
|
/**
|
|
1532
1126
|
* 장비에 주문의 흔적 강화를 1회 적용합니다.
|
|
1533
1127
|
* @param gear 강화를 적용할 장비
|
|
1534
|
-
* @param type 주문의 흔적 스탯
|
|
1535
|
-
*
|
|
1128
|
+
* @param type 주문의 흔적 스탯 종류; 다음 값 중 하나입니다:
|
|
1129
|
+
*
|
|
1130
|
+
* `GearPropType.incSTR` / `GearPropType.incDEX` /
|
|
1131
|
+
* `GearPropType.incINT` / `GearPropType.incLUK` /
|
|
1132
|
+
* `GearPropType.incAllStat` / `GearPropType.incMHP`
|
|
1133
|
+
* @param probability 주문의 흔적 성공 확률 %; 다음 값 중 하나입니다:
|
|
1134
|
+
*
|
|
1135
|
+
* `100` / `70` / `30` / `15`
|
|
1536
1136
|
* @returns 주문서가 적용됐을 경우 `true`; 아닐 경우 `false`
|
|
1537
1137
|
*/
|
|
1538
|
-
applySpellTrace(c,
|
|
1539
|
-
const
|
|
1540
|
-
return
|
|
1138
|
+
applySpellTrace(c, s, o) {
|
|
1139
|
+
const a = w.getSpellTraceScroll(c, s, o);
|
|
1140
|
+
return a ? this.applyScroll(c, a) : !1;
|
|
1541
1141
|
}
|
|
1542
1142
|
/**
|
|
1543
|
-
* 장비의 업그레이드 가능 횟수를 1회 감소합니다.
|
|
1544
|
-
*
|
|
1545
|
-
* 주문서가 실패한 것과 동일한 효과입니다.
|
|
1143
|
+
* 장비의 업그레이드 가능 횟수를 실패로 1회 감소합니다.
|
|
1546
1144
|
* @param gear 감소할 장비
|
|
1547
1145
|
* @returns 감소됐을 경우 `true`; 아닐 경우 `false`
|
|
1548
1146
|
*/
|
|
1549
|
-
|
|
1550
|
-
return c.
|
|
1147
|
+
addUpgradeFailCount(c) {
|
|
1148
|
+
return c.upgradeCountLeft < 1 ? !1 : (c.upgradeFailCount += 1, !0);
|
|
1551
1149
|
}
|
|
1552
1150
|
/**
|
|
1553
|
-
* 장비의 업그레이드 가능 횟수를 1회 복구합니다.
|
|
1554
|
-
*
|
|
1555
|
-
* 장비의 최대 업그레이드 가능 횟수를 초과하지 않습니다.
|
|
1151
|
+
* 장비의 실패한 업그레이드 가능 횟수를 1회 복구합니다.
|
|
1556
1152
|
* @param gear 복구할 장비
|
|
1557
1153
|
* @returns 복구했을 경우 `true`; 아닐 경우 `false`
|
|
1558
1154
|
*/
|
|
1559
|
-
|
|
1560
|
-
return c.
|
|
1155
|
+
restoreUpgradeCount(c) {
|
|
1156
|
+
return c.upgradeFailCount < 1 ? !1 : (c.upgradeFailCount -= 1, !0);
|
|
1561
1157
|
}
|
|
1562
1158
|
/**
|
|
1563
1159
|
* 장비의 주문서, 황금망치 관련 속성을 초기화합니다.
|
|
@@ -1567,26 +1163,26 @@ class O {
|
|
|
1567
1163
|
* @returns 초기화했을 경우 `true`; 아닐 경우 `false`
|
|
1568
1164
|
*/
|
|
1569
1165
|
resetUpgrade(c) {
|
|
1570
|
-
c.upgradeCount = 0, c.
|
|
1571
|
-
for (const [,
|
|
1572
|
-
|
|
1166
|
+
c.upgradeCount = 0, c.upgradeFailCount = 0, c.hammerCount = 0;
|
|
1167
|
+
for (const [, s] of c.options)
|
|
1168
|
+
s.upgrade = 0;
|
|
1573
1169
|
return !0;
|
|
1574
1170
|
}
|
|
1575
1171
|
}
|
|
1576
1172
|
export {
|
|
1577
|
-
|
|
1173
|
+
X as BonusStatLogic,
|
|
1578
1174
|
u as BonusStatType,
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1175
|
+
R as EnhancementLogic,
|
|
1176
|
+
M as Gear,
|
|
1177
|
+
I as GearOption,
|
|
1582
1178
|
n as GearPropType,
|
|
1583
|
-
|
|
1584
|
-
|
|
1179
|
+
K as GearReq,
|
|
1180
|
+
i as GearType,
|
|
1585
1181
|
C as Potential,
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1182
|
+
U as PotentialGrade,
|
|
1183
|
+
w as Scroll,
|
|
1184
|
+
q as Soul,
|
|
1185
|
+
W as SoulLogic,
|
|
1186
|
+
g as SoulSlot,
|
|
1187
|
+
x as UpgradeLogic
|
|
1592
1188
|
};
|