koishi-plugin-smmcat-gensokyo 0.0.26 → 0.0.28
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/lib/battle.d.ts +4 -0
- package/lib/damage.d.ts +3 -1
- package/lib/data/skillFn.d.ts +9 -1
- package/lib/index.js +111 -13
- package/lib/test.d.ts +1 -8
- package/package.json +1 -1
package/lib/battle.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ type TeamData = {
|
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
export type BattleAttribute = {
|
|
27
|
+
/** 唯一标识 */
|
|
28
|
+
id: number;
|
|
27
29
|
/** 阵容 */
|
|
28
30
|
for?: 'self' | 'goal';
|
|
29
31
|
/** 等级 */
|
|
@@ -102,6 +104,8 @@ export type BuffGain = {
|
|
|
102
104
|
dizziness?: boolean;
|
|
103
105
|
/** 是否混乱 */
|
|
104
106
|
chaos?: boolean;
|
|
107
|
+
/** 伤害减免 */
|
|
108
|
+
reduction?: number;
|
|
105
109
|
};
|
|
106
110
|
/** 最后战斗状态 */
|
|
107
111
|
type LastPlay = {
|
package/lib/damage.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export type DamageConfig = {
|
|
|
28
28
|
isCsp: boolean;
|
|
29
29
|
/** 是否未破防 */
|
|
30
30
|
isBadDef: boolean;
|
|
31
|
+
/** 减免伤害 */
|
|
32
|
+
reductionVal: number;
|
|
31
33
|
};
|
|
32
34
|
declare class Damage {
|
|
33
35
|
config: DamageConfig;
|
|
@@ -45,7 +47,7 @@ declare class Damage {
|
|
|
45
47
|
csp(fn: (config: DamageConfig) => void): this;
|
|
46
48
|
/** 防御结算 */
|
|
47
49
|
beforDef(fn: (config: DamageConfig) => void): this;
|
|
48
|
-
/** 最终结算 */
|
|
50
|
+
/** 最终结算 伤害减免 */
|
|
49
51
|
beforEnd(fn: (config: DamageConfig) => void): this;
|
|
50
52
|
result(fn?: DamageCallback): DamageConfig;
|
|
51
53
|
}
|
package/lib/data/skillFn.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare enum SkillType {
|
|
|
4
4
|
释放失败 = "\u91CA\u653E\u5931\u8D25",
|
|
5
5
|
伤害技 = "\u4F24\u5BB3\u6280",
|
|
6
6
|
增益技 = "\u589E\u76CA\u6280",
|
|
7
|
+
减益技 = "\u51CF\u76CA\u6280",
|
|
7
8
|
治疗技 = "\u6CBB\u7597\u6280",
|
|
8
9
|
奥义 = "\u5965\u4E49"
|
|
9
10
|
}
|
|
@@ -37,6 +38,13 @@ interface BuffSkillParams {
|
|
|
37
38
|
/** 错误提示 */
|
|
38
39
|
err?: string;
|
|
39
40
|
}
|
|
41
|
+
interface DeBuffSkillParams {
|
|
42
|
+
type: SkillType.减益技;
|
|
43
|
+
/** 是否衔接普攻 */
|
|
44
|
+
isNext: boolean;
|
|
45
|
+
/** 错误提示 */
|
|
46
|
+
err?: string;
|
|
47
|
+
}
|
|
40
48
|
interface UltimateSkillParams {
|
|
41
49
|
type: SkillType.奥义;
|
|
42
50
|
/** 是否衔接普攻 */
|
|
@@ -49,7 +57,7 @@ interface ErrSkillParams {
|
|
|
49
57
|
/** 错误提示 */
|
|
50
58
|
err?: string;
|
|
51
59
|
}
|
|
52
|
-
type SkillParams = DamageSkillParams | BuffSkillParams | HealSkillParams | UltimateSkillParams | ErrSkillParams;
|
|
60
|
+
type SkillParams = DamageSkillParams | BuffSkillParams | HealSkillParams | UltimateSkillParams | ErrSkillParams | DeBuffSkillParams;
|
|
53
61
|
interface SkillConfig<T extends SkillType = SkillType> {
|
|
54
62
|
/** 技能名 */
|
|
55
63
|
name: string;
|
package/lib/index.js
CHANGED
|
@@ -55,13 +55,15 @@ var GensokyoMap = {
|
|
|
55
55
|
areaName: "地下墓穴",
|
|
56
56
|
type: "BOSS区" /* BOSS区 */,
|
|
57
57
|
needLv: 1,
|
|
58
|
-
down: "蜘蛛洞穴"
|
|
58
|
+
down: "蜘蛛洞穴",
|
|
59
|
+
monster: [{ name: "古明地觉", lv: 15 }]
|
|
59
60
|
},
|
|
60
61
|
"蜘蛛洞穴": {
|
|
61
62
|
floor: 1,
|
|
62
63
|
areaName: "蜘蛛洞穴",
|
|
63
64
|
type: "冒险区" /* 冒险区 */,
|
|
64
65
|
needLv: 1,
|
|
66
|
+
top: "地下墓穴",
|
|
65
67
|
down: "蜘蛛森林一"
|
|
66
68
|
},
|
|
67
69
|
"蜘蛛森林一": {
|
|
@@ -700,6 +702,30 @@ var monsterData = {
|
|
|
700
702
|
{ name: "初级复活卷轴", val: 1, radomVal: 50 }
|
|
701
703
|
],
|
|
702
704
|
fn: [{ name: "毒之牙", prob: 1 }]
|
|
705
|
+
},
|
|
706
|
+
"古明地觉": {
|
|
707
|
+
name: "古明地觉",
|
|
708
|
+
type: "BOSS" /* BOSS */,
|
|
709
|
+
info: "位于旧地狱中心地带的管理者,拥有读心的控制技能。",
|
|
710
|
+
pic: "http://smmcat.cn/run/gensokyo/古明地觉.png",
|
|
711
|
+
hp: 95,
|
|
712
|
+
maxHp: 95,
|
|
713
|
+
mp: 140,
|
|
714
|
+
maxMp: 140,
|
|
715
|
+
atk: 24,
|
|
716
|
+
def: 2,
|
|
717
|
+
chr: 150,
|
|
718
|
+
csr: 0,
|
|
719
|
+
evasion: 150,
|
|
720
|
+
hit: 30,
|
|
721
|
+
ghd: 1.6,
|
|
722
|
+
speed: 8,
|
|
723
|
+
giveExp: 20,
|
|
724
|
+
giveMonetary: 8,
|
|
725
|
+
giveProps: [
|
|
726
|
+
{ name: "初级复活卷轴", val: 1, radomVal: 50 }
|
|
727
|
+
],
|
|
728
|
+
fn: [{ name: "恐怖催眠术", prob: 1 }, { name: "恐怖的回忆", prob: 2 }]
|
|
703
729
|
}
|
|
704
730
|
};
|
|
705
731
|
|
|
@@ -833,7 +859,8 @@ var Damage = class {
|
|
|
833
859
|
isRealHarm: realHarm,
|
|
834
860
|
isEvasion: false,
|
|
835
861
|
isCsp: false,
|
|
836
|
-
isBadDef: false
|
|
862
|
+
isBadDef: false,
|
|
863
|
+
reductionVal: 0
|
|
837
864
|
};
|
|
838
865
|
}
|
|
839
866
|
/** 伤害判定前 */
|
|
@@ -895,8 +922,15 @@ var Damage = class {
|
|
|
895
922
|
}
|
|
896
923
|
return this;
|
|
897
924
|
}
|
|
898
|
-
/** 最终结算 */
|
|
925
|
+
/** 最终结算 伤害减免 */
|
|
899
926
|
beforEnd(fn) {
|
|
927
|
+
if (!this.config.isRealHarm) {
|
|
928
|
+
this.config.reductionVal = Math.floor(this.config.agent.goal.gain.reduction * this.config.harm);
|
|
929
|
+
this.config.harm -= this.config.reductionVal;
|
|
930
|
+
if (this.config.harm < 0) {
|
|
931
|
+
this.config.harm = 0;
|
|
932
|
+
}
|
|
933
|
+
}
|
|
900
934
|
fn && fn(this.config);
|
|
901
935
|
return this;
|
|
902
936
|
}
|
|
@@ -1048,6 +1082,19 @@ var BuffFn = {
|
|
|
1048
1082
|
}
|
|
1049
1083
|
});
|
|
1050
1084
|
}, "fn")
|
|
1085
|
+
},
|
|
1086
|
+
"破绽": {
|
|
1087
|
+
name: "破绽",
|
|
1088
|
+
type: "减益" /* 减益 */,
|
|
1089
|
+
info: "增加受到的 30% 伤害",
|
|
1090
|
+
fn: /* @__PURE__ */ __name(function(agent, fn) {
|
|
1091
|
+
fn && fn({
|
|
1092
|
+
type: "减益" /* 减益 */,
|
|
1093
|
+
down: {
|
|
1094
|
+
reduction: 0.3
|
|
1095
|
+
}
|
|
1096
|
+
});
|
|
1097
|
+
}, "fn")
|
|
1051
1098
|
}
|
|
1052
1099
|
};
|
|
1053
1100
|
function giveBuff(agent, buff) {
|
|
@@ -1072,6 +1119,7 @@ function settlementBuff(agent) {
|
|
|
1072
1119
|
agent.gain.maxMp = 0;
|
|
1073
1120
|
agent.gain.maxMp = 0;
|
|
1074
1121
|
agent.gain.speed = 0;
|
|
1122
|
+
agent.gain.reduction = 0;
|
|
1075
1123
|
agent.gain.dizziness = false;
|
|
1076
1124
|
agent.gain.chaos = false;
|
|
1077
1125
|
const msgList = [];
|
|
@@ -1084,7 +1132,8 @@ function settlementBuff(agent) {
|
|
|
1084
1132
|
ghd: "暴击伤害",
|
|
1085
1133
|
evasion: "闪避值",
|
|
1086
1134
|
hit: "命中值",
|
|
1087
|
-
speed: "速度"
|
|
1135
|
+
speed: "速度",
|
|
1136
|
+
reduction: "伤害减免"
|
|
1088
1137
|
};
|
|
1089
1138
|
Object.keys(agent.buff).forEach((item) => {
|
|
1090
1139
|
const buffInfo = BuffFn[item] || null;
|
|
@@ -1106,7 +1155,7 @@ function settlementBuff(agent) {
|
|
|
1106
1155
|
const upMsg = [];
|
|
1107
1156
|
buffInfo.fn(agent, (val) => {
|
|
1108
1157
|
Object.keys(val.up).forEach((buffName) => {
|
|
1109
|
-
if (agent.gain[buffName]) {
|
|
1158
|
+
if (agent.gain[buffName] !== void 0) {
|
|
1110
1159
|
upMsg.push(
|
|
1111
1160
|
val.up[buffName] > 0 ? gainDict[buffName] + "↑" + val.up[buffName] : gainDict[buffName] + "↓" + Math.abs(val.up[buffName])
|
|
1112
1161
|
);
|
|
@@ -1120,14 +1169,14 @@ function settlementBuff(agent) {
|
|
|
1120
1169
|
const downMsg = [];
|
|
1121
1170
|
buffInfo.fn(agent, (val) => {
|
|
1122
1171
|
Object.keys(val.down).forEach((buffName) => {
|
|
1123
|
-
if (agent.gain[buffName]) {
|
|
1172
|
+
if (agent.gain[buffName] !== void 0) {
|
|
1124
1173
|
downMsg.push(
|
|
1125
1174
|
val.down[buffName] > 0 ? gainDict[buffName] + "↓" + val.down[buffName] : gainDict[buffName] + "↑" + Math.abs(val.down[buffName])
|
|
1126
1175
|
);
|
|
1127
1176
|
agent.gain[buffName] -= val.down[buffName];
|
|
1128
1177
|
}
|
|
1129
1178
|
});
|
|
1130
|
-
msgList.push(`${buffInfo.name}:${
|
|
1179
|
+
msgList.push(`${buffInfo.name}:${downMsg.join("、")}`);
|
|
1131
1180
|
});
|
|
1132
1181
|
break;
|
|
1133
1182
|
case "控制" /* 控制 */:
|
|
@@ -1144,7 +1193,7 @@ function settlementBuff(agent) {
|
|
|
1144
1193
|
--agent.buff[item].timer;
|
|
1145
1194
|
if (agent.buff[item].timer == 0) delete agent.buff[item];
|
|
1146
1195
|
});
|
|
1147
|
-
return msgList.length ? msgList.map((item) => `» ${getLineupName(agent)}:${item}
|
|
1196
|
+
return msgList.length ? msgList.map((item) => `» ${getLineupName(agent)}:${item}`).join("\n") : null;
|
|
1148
1197
|
}
|
|
1149
1198
|
__name(settlementBuff, "settlementBuff");
|
|
1150
1199
|
|
|
@@ -1333,10 +1382,53 @@ var skillFn = {
|
|
|
1333
1382
|
isNext: false,
|
|
1334
1383
|
target: [goal]
|
|
1335
1384
|
});
|
|
1336
|
-
msgList.push(
|
|
1385
|
+
msgList.push(`- 对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` + moreDamageInfo(damageData));
|
|
1337
1386
|
});
|
|
1338
1387
|
return msgList.join("\n");
|
|
1339
1388
|
}, "fn")
|
|
1389
|
+
},
|
|
1390
|
+
"恐怖催眠术": {
|
|
1391
|
+
name: "恐怖催眠术",
|
|
1392
|
+
type: "伤害技" /* 伤害技 */,
|
|
1393
|
+
info: "对单个目标造成(攻击1.5倍+自身命中值10%)伤害,造成伤害有60%概率使其晕眩2回合。",
|
|
1394
|
+
lv: 1,
|
|
1395
|
+
mp: 40,
|
|
1396
|
+
fn: /* @__PURE__ */ __name(function(agent, agentList, fn) {
|
|
1397
|
+
let useBuff = false;
|
|
1398
|
+
const damageData = new Damage(agent).result({
|
|
1399
|
+
before: /* @__PURE__ */ __name((val) => {
|
|
1400
|
+
val.default_harm += Math.floor(val.default_harm * 0.2) + Math.floor((val.agent.self.hit + val.agent.self.gain.hit) * 0.1);
|
|
1401
|
+
}, "before"),
|
|
1402
|
+
beforEnd: /* @__PURE__ */ __name((val) => {
|
|
1403
|
+
if (val.harm && random(0, 10) < 6) {
|
|
1404
|
+
useBuff = true;
|
|
1405
|
+
giveBuff(agent.goal, { name: "晕眩", timer: 3 });
|
|
1406
|
+
}
|
|
1407
|
+
}, "beforEnd")
|
|
1408
|
+
});
|
|
1409
|
+
fn({
|
|
1410
|
+
type: "伤害技" /* 伤害技 */,
|
|
1411
|
+
damage: damageData,
|
|
1412
|
+
isNext: false,
|
|
1413
|
+
target: [agent.goal]
|
|
1414
|
+
});
|
|
1415
|
+
return `${getLineupName(agent.self)} 发动恐怖催眠术!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(晕眩)" : ""}` + moreDamageInfo(damageData);
|
|
1416
|
+
}, "fn")
|
|
1417
|
+
},
|
|
1418
|
+
"恐怖的回忆": {
|
|
1419
|
+
name: "恐怖的回忆",
|
|
1420
|
+
type: "减益技" /* 减益技 */,
|
|
1421
|
+
info: "对单个目标附加破绽状态(额外受到30%伤害),持续2回合",
|
|
1422
|
+
lv: 1,
|
|
1423
|
+
mp: 30,
|
|
1424
|
+
fn: /* @__PURE__ */ __name(function(agent, agentList, fn) {
|
|
1425
|
+
giveBuff(agent.goal, { name: "破绽", timer: 2 });
|
|
1426
|
+
fn({
|
|
1427
|
+
type: "减益技" /* 减益技 */,
|
|
1428
|
+
isNext: false
|
|
1429
|
+
});
|
|
1430
|
+
return `${getLineupName(agent.self)} 发动恐怖的回忆!对 ${getLineupName(agent.goal)} 附加了2回合破绽状态。`;
|
|
1431
|
+
}, "fn")
|
|
1340
1432
|
}
|
|
1341
1433
|
};
|
|
1342
1434
|
|
|
@@ -1681,7 +1773,7 @@ MP:${item.mp}/${item.maxMp + item.gain.maxMp}`);
|
|
|
1681
1773
|
}
|
|
1682
1774
|
}
|
|
1683
1775
|
} else {
|
|
1684
|
-
const fliteMyList = allAgentList.filter((item) => item.
|
|
1776
|
+
const fliteMyList = allAgentList.filter((item) => item.id !== agent.id && item.hp > 0);
|
|
1685
1777
|
if (!fliteMyList.length) continue;
|
|
1686
1778
|
selectGoal = fliteMyList[Math.random() * fliteMyList.length];
|
|
1687
1779
|
}
|
|
@@ -1813,7 +1905,9 @@ MP:${item.mp}/${item.maxMp + item.gain.maxMp}`);
|
|
|
1813
1905
|
});
|
|
1814
1906
|
}
|
|
1815
1907
|
});
|
|
1816
|
-
|
|
1908
|
+
if (overInfo.win == "self") {
|
|
1909
|
+
await session.send(`小队获得${val}EXP、${monetary}货币!`);
|
|
1910
|
+
}
|
|
1817
1911
|
for (const agent of selfList) {
|
|
1818
1912
|
aynchronize(agent);
|
|
1819
1913
|
if (overInfo.win == "self") {
|
|
@@ -1856,6 +1950,7 @@ function initBattleAttribute(data) {
|
|
|
1856
1950
|
if ("playName" in data) {
|
|
1857
1951
|
const userData = data;
|
|
1858
1952
|
const temp = {
|
|
1953
|
+
id: Date.now(),
|
|
1859
1954
|
userId: userData.userId,
|
|
1860
1955
|
name: userData.playName,
|
|
1861
1956
|
lv: userData.lv,
|
|
@@ -1884,7 +1979,8 @@ function initBattleAttribute(data) {
|
|
|
1884
1979
|
hit: 0,
|
|
1885
1980
|
speed: 0,
|
|
1886
1981
|
chaos: false,
|
|
1887
|
-
dizziness: false
|
|
1982
|
+
dizziness: false,
|
|
1983
|
+
reduction: 0
|
|
1888
1984
|
},
|
|
1889
1985
|
buff: {},
|
|
1890
1986
|
fn: [],
|
|
@@ -1894,6 +1990,7 @@ function initBattleAttribute(data) {
|
|
|
1894
1990
|
} else {
|
|
1895
1991
|
const monsterData2 = data;
|
|
1896
1992
|
const temp = {
|
|
1993
|
+
id: Date.now(),
|
|
1897
1994
|
name: monsterData2.name,
|
|
1898
1995
|
type: "怪物",
|
|
1899
1996
|
selfType: monsterData2.type,
|
|
@@ -1921,7 +2018,8 @@ function initBattleAttribute(data) {
|
|
|
1921
2018
|
hit: 0,
|
|
1922
2019
|
speed: 0,
|
|
1923
2020
|
chaos: false,
|
|
1924
|
-
dizziness: false
|
|
2021
|
+
dizziness: false,
|
|
2022
|
+
reduction: 0
|
|
1925
2023
|
},
|
|
1926
2024
|
buff: {},
|
|
1927
2025
|
fn: monsterData2.fn ? JSON.parse(JSON.stringify(monsterData2.fn)) : [],
|
package/lib/test.d.ts
CHANGED