koishi-plugin-smmcat-gensokyo 0.0.41 → 0.0.43
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/damage.d.ts +10 -1
- package/lib/data/PassiveFn.d.ts +2 -1
- package/lib/index.js +124 -20
- package/package.json +1 -1
package/lib/damage.d.ts
CHANGED
|
@@ -16,6 +16,11 @@ export type DamageConfig = {
|
|
|
16
16
|
self: BattleAttribute;
|
|
17
17
|
goal: BattleAttribute;
|
|
18
18
|
};
|
|
19
|
+
/** 浅拷贝数据 */
|
|
20
|
+
linkAgent: {
|
|
21
|
+
self: BattleAttribute;
|
|
22
|
+
goal: BattleAttribute;
|
|
23
|
+
};
|
|
19
24
|
/** 实际伤害数据 */
|
|
20
25
|
harm: number;
|
|
21
26
|
/** 原始伤害数据 */
|
|
@@ -30,6 +35,8 @@ export type DamageConfig = {
|
|
|
30
35
|
isBadDef: boolean;
|
|
31
36
|
/** 减免伤害 */
|
|
32
37
|
reductionVal: number;
|
|
38
|
+
/** 被动技能触发文本 */
|
|
39
|
+
passiveMsg: string[];
|
|
33
40
|
};
|
|
34
41
|
declare class Damage {
|
|
35
42
|
config: DamageConfig;
|
|
@@ -67,4 +74,6 @@ declare function giveCure(goal: BattleAttribute, val: number, fn?: (msg: string)
|
|
|
67
74
|
};
|
|
68
75
|
/** 伤害额外信息 */
|
|
69
76
|
declare function moreDamageInfo(damage: DamageConfig): string;
|
|
70
|
-
|
|
77
|
+
/** 更多的伤害提示信息 */
|
|
78
|
+
declare function baseMoreDamage(damageInfo: DamageConfig): string;
|
|
79
|
+
export { Damage, BuffDamage, giveDamage, giveCure, moreDamageInfo, baseMoreDamage };
|
package/lib/data/PassiveFn.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -331,7 +331,7 @@ var monsterData = {
|
|
|
331
331
|
speed: 8,
|
|
332
332
|
giveExp: 20,
|
|
333
333
|
giveMonetary: 8,
|
|
334
|
-
passiveList: [],
|
|
334
|
+
passiveList: ["反伤"],
|
|
335
335
|
giveProps: [
|
|
336
336
|
{ name: "大红药", val: 2, radomVal: 50 }
|
|
337
337
|
],
|
|
@@ -432,7 +432,7 @@ var Monster = {
|
|
|
432
432
|
},
|
|
433
433
|
/** 格式化怪物属性数据 */
|
|
434
434
|
monsterAttributeTextFormat(monster) {
|
|
435
|
-
const { name: name2, type, lv, hp, maxHp, mp, maxMp, atk, def, chr, evasion, hit, ghd, speed, info, pic, giveProps } = monster;
|
|
435
|
+
const { name: name2, type, lv, hp, maxHp, mp, maxMp, atk, def, chr, evasion, hit, ghd, speed, info, pic, giveProps, passiveList } = monster;
|
|
436
436
|
const propsList = giveProps.filter((item) => item.lv ? lv >= item.lv : true).map((item) => item.name);
|
|
437
437
|
const attributeText = (pic ? import_koishi.h.image(pic) + "\n" : "") + `Lv.${lv}【${name2}】
|
|
438
438
|
|
|
@@ -445,7 +445,8 @@ var Monster = {
|
|
|
445
445
|
【速度值】${speed}
|
|
446
446
|
【命中率】${(100 + (hit - 1e3) / 10).toFixed(1)}%
|
|
447
447
|
【暴击率】${(chr / 10).toFixed(1)}%
|
|
448
|
-
【爆伤倍率】${(ghd * 100).toFixed(0)}%` + (
|
|
448
|
+
【爆伤倍率】${(ghd * 100).toFixed(0)}%` + (passiveList.length ? `
|
|
449
|
+
【被动技能】${passiveList.join("、")}` : "") + (propsList?.length ? `
|
|
449
450
|
【概率掉落道具】` + propsList.join("、") : "") + (info ? "\n\n" + info : "");
|
|
450
451
|
return attributeText;
|
|
451
452
|
}
|
|
@@ -778,9 +779,79 @@ __name(settlementBuff, "settlementBuff");
|
|
|
778
779
|
var PassiveFn = {
|
|
779
780
|
"吸血": {
|
|
780
781
|
name: "吸血",
|
|
781
|
-
info: "造成伤害时,汲取10
|
|
782
|
+
info: "造成伤害时,汲取10%该次伤害的值治疗自己",
|
|
783
|
+
type: "atk",
|
|
782
784
|
damageFn: /* @__PURE__ */ __name(function(config) {
|
|
783
785
|
const val = Math.floor(config.harm * 0.1);
|
|
786
|
+
if (val) {
|
|
787
|
+
const res = giveCure(config.linkAgent.self, val);
|
|
788
|
+
return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] HP+${res.val}`;
|
|
789
|
+
}
|
|
790
|
+
return ``;
|
|
791
|
+
}, "damageFn")
|
|
792
|
+
},
|
|
793
|
+
"反伤": {
|
|
794
|
+
name: "反伤",
|
|
795
|
+
info: "有40%概率直接反弹本次伤害的20%(真实伤害)",
|
|
796
|
+
type: "hit",
|
|
797
|
+
damageFn: /* @__PURE__ */ __name(function(config) {
|
|
798
|
+
const val = Math.floor(config.harm * 0.2);
|
|
799
|
+
if (val && random(0, 10) <= 4) {
|
|
800
|
+
const value = new BuffDamage(val, config.linkAgent.self, true).giveDamage();
|
|
801
|
+
return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] HP-${value}`;
|
|
802
|
+
}
|
|
803
|
+
return ``;
|
|
804
|
+
}, "damageFn")
|
|
805
|
+
},
|
|
806
|
+
"破势": {
|
|
807
|
+
name: "破势",
|
|
808
|
+
info: "敌方血量大于70%时,造成的伤害提高30%",
|
|
809
|
+
type: "atk",
|
|
810
|
+
damageFn: /* @__PURE__ */ __name(function(config) {
|
|
811
|
+
if (config.linkAgent.goal.hp / config.linkAgent.goal.maxHp > 0.7) {
|
|
812
|
+
const upVal = Math.floor(config.harm * 0.3);
|
|
813
|
+
if (upVal) {
|
|
814
|
+
config.harm += Math.floor(config.harm * 0.3);
|
|
815
|
+
return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] 伤害+${upVal}`;
|
|
816
|
+
}
|
|
817
|
+
return ``;
|
|
818
|
+
}
|
|
819
|
+
return ``;
|
|
820
|
+
}, "damageFn")
|
|
821
|
+
},
|
|
822
|
+
"心眼": {
|
|
823
|
+
name: "心眼",
|
|
824
|
+
info: "敌方血量小于40%时,造成的伤害提高30%",
|
|
825
|
+
type: "atk",
|
|
826
|
+
damageFn: /* @__PURE__ */ __name(function(config) {
|
|
827
|
+
if (config.linkAgent.goal.hp / config.linkAgent.goal.maxHp < 0.4) {
|
|
828
|
+
const upVal = Math.floor(config.harm * 0.3);
|
|
829
|
+
if (upVal) {
|
|
830
|
+
config.harm += Math.floor(config.harm * 0.3);
|
|
831
|
+
return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] 伤害+${upVal}`;
|
|
832
|
+
}
|
|
833
|
+
return ``;
|
|
834
|
+
}
|
|
835
|
+
return ``;
|
|
836
|
+
}, "damageFn")
|
|
837
|
+
},
|
|
838
|
+
"针女": {
|
|
839
|
+
name: "针女",
|
|
840
|
+
info: "攻击时有40%概率额外造成敌方5%血量真实伤害(伤害最大不超过使用者攻击力的120%)",
|
|
841
|
+
type: "atk",
|
|
842
|
+
damageFn: /* @__PURE__ */ __name(function(config) {
|
|
843
|
+
if (random(0, 10) <= 4) {
|
|
844
|
+
const upVal = Math.min(
|
|
845
|
+
config.linkAgent.self.atk + config.linkAgent.self.gain.atk,
|
|
846
|
+
Math.floor(config.linkAgent.goal.maxHp * 0.05)
|
|
847
|
+
);
|
|
848
|
+
if (upVal) {
|
|
849
|
+
const value = new BuffDamage(upVal, config.linkAgent.goal, true).giveDamage();
|
|
850
|
+
return `‣ ${getLineupName(config.linkAgent.goal)}:[${this.name}] HP-${value}`;
|
|
851
|
+
}
|
|
852
|
+
return ``;
|
|
853
|
+
}
|
|
854
|
+
return ``;
|
|
784
855
|
}, "damageFn")
|
|
785
856
|
}
|
|
786
857
|
};
|
|
@@ -794,13 +865,15 @@ var Damage = class {
|
|
|
794
865
|
constructor(agent, realHarm = false) {
|
|
795
866
|
this.config = {
|
|
796
867
|
agent: { self: { ...agent.self }, goal: { ...agent.goal } },
|
|
868
|
+
linkAgent: { self: agent.self, goal: agent.goal },
|
|
797
869
|
harm: 0,
|
|
798
870
|
default_harm: 0,
|
|
799
871
|
isRealHarm: realHarm,
|
|
800
872
|
isEvasion: false,
|
|
801
873
|
isCsp: false,
|
|
802
874
|
isBadDef: false,
|
|
803
|
-
reductionVal: 0
|
|
875
|
+
reductionVal: 0,
|
|
876
|
+
passiveMsg: []
|
|
804
877
|
};
|
|
805
878
|
}
|
|
806
879
|
/** 伤害判定前 */
|
|
@@ -872,9 +945,12 @@ var Damage = class {
|
|
|
872
945
|
}
|
|
873
946
|
}
|
|
874
947
|
fn && fn(this.config);
|
|
875
|
-
if (this.config.
|
|
876
|
-
this.config.
|
|
877
|
-
PassiveFn[passiveName].
|
|
948
|
+
if (this.config.linkAgent.self.passiveList?.length) {
|
|
949
|
+
this.config.linkAgent.self.passiveList.forEach((passiveName) => {
|
|
950
|
+
if (PassiveFn[passiveName].type == "atk") {
|
|
951
|
+
const msg = PassiveFn[passiveName].damageFn(this.config);
|
|
952
|
+
msg && this.config.passiveMsg.push(msg);
|
|
953
|
+
}
|
|
878
954
|
});
|
|
879
955
|
}
|
|
880
956
|
return this;
|
|
@@ -922,6 +998,14 @@ var BuffDamage = class {
|
|
|
922
998
|
}
|
|
923
999
|
};
|
|
924
1000
|
function giveDamage(self, goal, damage) {
|
|
1001
|
+
if (damage.linkAgent.goal.passiveList?.length) {
|
|
1002
|
+
damage.linkAgent.goal.passiveList.forEach((passiveName) => {
|
|
1003
|
+
if (PassiveFn[passiveName].type == "hit") {
|
|
1004
|
+
const msg = PassiveFn[passiveName].damageFn(damage);
|
|
1005
|
+
msg && damage.passiveMsg.push(msg);
|
|
1006
|
+
}
|
|
1007
|
+
});
|
|
1008
|
+
}
|
|
925
1009
|
if (goal.hp - damage.harm > 0) {
|
|
926
1010
|
goal.hp -= damage.harm;
|
|
927
1011
|
return damage.harm;
|
|
@@ -955,9 +1039,13 @@ function giveCure(goal, val, fn) {
|
|
|
955
1039
|
}
|
|
956
1040
|
__name(giveCure, "giveCure");
|
|
957
1041
|
function moreDamageInfo(damage) {
|
|
958
|
-
return (damage.isCsp ? `(暴击!)` : "") + (damage.isEvasion ?
|
|
1042
|
+
return (damage.isCsp ? `(暴击!)` : "") + (damage.isEvasion ? `(闪避!)` : "") + (damage.isBadDef ? `(未破防!)` : "") + (damage.isRealHarm ? `(真实伤害)` : "");
|
|
959
1043
|
}
|
|
960
1044
|
__name(moreDamageInfo, "moreDamageInfo");
|
|
1045
|
+
function baseMoreDamage(damageInfo) {
|
|
1046
|
+
return moreDamageInfo(damageInfo) + (damageInfo.passiveMsg.length ? "\n" + damageInfo.passiveMsg.join("‣") : "");
|
|
1047
|
+
}
|
|
1048
|
+
__name(baseMoreDamage, "baseMoreDamage");
|
|
961
1049
|
|
|
962
1050
|
// src/data/skillFn.ts
|
|
963
1051
|
var skillFn = {
|
|
@@ -981,7 +1069,7 @@ var skillFn = {
|
|
|
981
1069
|
target: [agent.goal],
|
|
982
1070
|
isNext: false
|
|
983
1071
|
});
|
|
984
|
-
return `${getLineupName(agent.self)} 释放重砍,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` +
|
|
1072
|
+
return `${getLineupName(agent.self)} 释放重砍,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
|
|
985
1073
|
}, "fn")
|
|
986
1074
|
},
|
|
987
1075
|
"突刺": {
|
|
@@ -1004,7 +1092,7 @@ var skillFn = {
|
|
|
1004
1092
|
target: [agent.goal],
|
|
1005
1093
|
isNext: false
|
|
1006
1094
|
});
|
|
1007
|
-
return `${getLineupName(agent.self)} 释放突刺,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` +
|
|
1095
|
+
return `${getLineupName(agent.self)} 释放突刺,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
|
|
1008
1096
|
}, "fn")
|
|
1009
1097
|
},
|
|
1010
1098
|
"水炮": {
|
|
@@ -1026,7 +1114,7 @@ var skillFn = {
|
|
|
1026
1114
|
target: [agent.goal],
|
|
1027
1115
|
isNext: false
|
|
1028
1116
|
});
|
|
1029
|
-
return `${getLineupName(agent.self)} 释放水炮,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` +
|
|
1117
|
+
return `${getLineupName(agent.self)} 释放水炮,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
|
|
1030
1118
|
}, "fn")
|
|
1031
1119
|
},
|
|
1032
1120
|
"濒死一击": {
|
|
@@ -1049,7 +1137,7 @@ var skillFn = {
|
|
|
1049
1137
|
target: [agent.goal],
|
|
1050
1138
|
isNext: false
|
|
1051
1139
|
});
|
|
1052
|
-
return `${getLineupName(agent.self)} 释放濒死一击,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` +
|
|
1140
|
+
return `${getLineupName(agent.self)} 释放濒死一击,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
|
|
1053
1141
|
} else {
|
|
1054
1142
|
fn({
|
|
1055
1143
|
type: "释放失败" /* 释放失败 */,
|
|
@@ -1098,7 +1186,7 @@ var skillFn = {
|
|
|
1098
1186
|
target: [agent.goal],
|
|
1099
1187
|
isNext: false
|
|
1100
1188
|
});
|
|
1101
|
-
return `${getLineupName(agent.self)} 进行垂死挣扎,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` +
|
|
1189
|
+
return `${getLineupName(agent.self)} 进行垂死挣扎,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
|
|
1102
1190
|
}, "fn")
|
|
1103
1191
|
},
|
|
1104
1192
|
"治愈之光": {
|
|
@@ -1144,7 +1232,7 @@ var skillFn = {
|
|
|
1144
1232
|
isNext: false,
|
|
1145
1233
|
target: [goal]
|
|
1146
1234
|
});
|
|
1147
|
-
msgList.push(`- 对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` +
|
|
1235
|
+
msgList.push(`- 对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` + baseMoreDamage(damageData));
|
|
1148
1236
|
});
|
|
1149
1237
|
return msgList.join("\n");
|
|
1150
1238
|
}, "fn")
|
|
@@ -1174,7 +1262,7 @@ var skillFn = {
|
|
|
1174
1262
|
isNext: false,
|
|
1175
1263
|
target: [agent.goal]
|
|
1176
1264
|
});
|
|
1177
|
-
return `${getLineupName(agent.self)} 发动恐怖催眠术!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(晕眩)" : ""}` +
|
|
1265
|
+
return `${getLineupName(agent.self)} 发动恐怖催眠术!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(晕眩)" : ""}` + baseMoreDamage(damageData);
|
|
1178
1266
|
}, "fn")
|
|
1179
1267
|
},
|
|
1180
1268
|
"恐怖的回忆": {
|
|
@@ -1287,7 +1375,7 @@ var skillFn = {
|
|
|
1287
1375
|
isNext: false,
|
|
1288
1376
|
target: [agent.goal]
|
|
1289
1377
|
});
|
|
1290
|
-
return `${getLineupName(agent.self)} 发动无意识行动!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(沉默)" : ""}` +
|
|
1378
|
+
return `${getLineupName(agent.self)} 发动无意识行动!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(沉默)" : ""}` + baseMoreDamage(damageData);
|
|
1291
1379
|
}, "fn")
|
|
1292
1380
|
}
|
|
1293
1381
|
};
|
|
@@ -1713,7 +1801,7 @@ MP:${item.mp}/${item.maxMp + item.gain.maxMp}`);
|
|
|
1713
1801
|
const damageInfo = new Damage({ self: agent, goal: selectGoal }).result();
|
|
1714
1802
|
giveDamage(agent, selectGoal, damageInfo);
|
|
1715
1803
|
msgList.push(
|
|
1716
|
-
`${getLineupName(agent)} 使用普攻攻击了 ${getLineupName(selectGoal)},造成了${damageInfo.harm}伤害。` +
|
|
1804
|
+
`${getLineupName(agent)} 使用普攻攻击了 ${getLineupName(selectGoal)},造成了${damageInfo.harm}伤害。` + baseMoreDamage(damageInfo)
|
|
1717
1805
|
);
|
|
1718
1806
|
}, "noralAtk");
|
|
1719
1807
|
if (funType == "普攻" || agent.gain.silence) {
|
|
@@ -2961,7 +3049,10 @@ var GensokyoMap = {
|
|
|
2961
3049
|
areaName: "2层-商店",
|
|
2962
3050
|
type: "安全区" /* 安全区 */,
|
|
2963
3051
|
needLv: 1,
|
|
2964
|
-
|
|
3052
|
+
top: "旅馆",
|
|
3053
|
+
left: "希望之泉",
|
|
3054
|
+
right: "大草场",
|
|
3055
|
+
down: "银行"
|
|
2965
3056
|
},
|
|
2966
3057
|
"大草场": {
|
|
2967
3058
|
floor: 2,
|
|
@@ -3724,7 +3815,20 @@ function apply(ctx, config) {
|
|
|
3724
3815
|
if (!goal) return `请输入技能名,例如 /技能查询 重砍`;
|
|
3725
3816
|
if (!skillFn[goal]) return `没有存在 ${goal} 技能!`;
|
|
3726
3817
|
return `[${goal}]信息如下:
|
|
3727
|
-
` + skillFn[goal].info
|
|
3818
|
+
` + skillFn[goal].info + `
|
|
3819
|
+
消耗MP:${skillFn[goal].mp}`;
|
|
3820
|
+
});
|
|
3821
|
+
ctx.command("幻想乡/被动查询 <goal>").action(async ({ session }, goal) => {
|
|
3822
|
+
if (!goal) return `请输入被动名,例如 /被动查询 吸血`;
|
|
3823
|
+
if (!PassiveFn[goal]) return `没有存在 ${goal} 被动!`;
|
|
3824
|
+
return `[${goal}]信息如下:
|
|
3825
|
+
` + PassiveFn[goal].info;
|
|
3826
|
+
});
|
|
3827
|
+
ctx.command("幻想乡/状态查询 <goal>").action(async ({ session }, goal) => {
|
|
3828
|
+
if (!goal) return `请输入技能名,例如 /状态查询 治愈`;
|
|
3829
|
+
if (!BuffFn[goal]) return `没有存在 ${goal} 状态!`;
|
|
3830
|
+
return `[${goal}]信息如下:
|
|
3831
|
+
` + BuffFn[goal].info;
|
|
3728
3832
|
});
|
|
3729
3833
|
const temp = {};
|
|
3730
3834
|
ctx.command("幻想乡/补给").action(async ({ session }) => {
|