koishi-plugin-smmcat-gensokyo 0.0.41 → 0.0.42

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 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
- export { Damage, BuffDamage, giveDamage, giveCure, moreDamageInfo };
77
+ /** 更多的伤害提示信息 */
78
+ declare function baseMoreDamage(damageInfo: DamageConfig): string;
79
+ export { Damage, BuffDamage, giveDamage, giveCure, moreDamageInfo, baseMoreDamage };
@@ -5,6 +5,7 @@ export type PassiveDict = {
5
5
  export type PassiveItem = {
6
6
  name: string;
7
7
  info: string;
8
- damageFn: (config: DamageConfig) => void;
8
+ type: 'atk' | 'hit';
9
+ damageFn: (config: DamageConfig) => string;
9
10
  };
10
11
  export declare const PassiveFn: PassiveDict;
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)}%` + (propsList?.length ? `
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,80 @@ __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
+ console.log(config.linkAgent.self);
802
+ return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] HP-${value}`;
803
+ }
804
+ return ``;
805
+ }, "damageFn")
806
+ },
807
+ "破势": {
808
+ name: "破势",
809
+ info: "敌方血量大于70%时,造成的伤害提高30%",
810
+ type: "atk",
811
+ damageFn: /* @__PURE__ */ __name(function(config) {
812
+ if (config.linkAgent.goal.hp / config.linkAgent.goal.maxHp > 0.7) {
813
+ const upVal = Math.floor(config.harm * 0.3);
814
+ if (upVal) {
815
+ config.harm += Math.floor(config.harm * 0.3);
816
+ return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] 伤害+${upVal}`;
817
+ }
818
+ return ``;
819
+ }
820
+ return ``;
821
+ }, "damageFn")
822
+ },
823
+ "心眼": {
824
+ name: "心眼",
825
+ info: "敌方血量小于40%时,造成的伤害提高30%",
826
+ type: "atk",
827
+ damageFn: /* @__PURE__ */ __name(function(config) {
828
+ if (config.linkAgent.goal.hp / config.linkAgent.goal.maxHp < 0.4) {
829
+ const upVal = Math.floor(config.harm * 0.3);
830
+ if (upVal) {
831
+ config.harm += Math.floor(config.harm * 0.3);
832
+ return `‣ ${getLineupName(config.linkAgent.self)}:[${this.name}] 伤害+${upVal}`;
833
+ }
834
+ return ``;
835
+ }
836
+ return ``;
837
+ }, "damageFn")
838
+ },
839
+ "针女": {
840
+ name: "针女",
841
+ info: "攻击时有40%概率额外造成敌方5%血量真实伤害(伤害最大不超过使用者攻击力的120%)",
842
+ type: "atk",
843
+ damageFn: /* @__PURE__ */ __name(function(config) {
844
+ if (random(0, 10) <= 4) {
845
+ const upVal = Math.min(
846
+ config.linkAgent.self.atk + config.linkAgent.self.gain.atk,
847
+ Math.floor(config.linkAgent.goal.maxHp * 0.05)
848
+ );
849
+ if (upVal) {
850
+ const value = new BuffDamage(upVal, config.linkAgent.goal, true).giveDamage();
851
+ return `‣ ${getLineupName(config.linkAgent.goal)}:[${this.name}] HP-${value}`;
852
+ }
853
+ return ``;
854
+ }
855
+ return ``;
784
856
  }, "damageFn")
785
857
  }
786
858
  };
@@ -794,13 +866,15 @@ var Damage = class {
794
866
  constructor(agent, realHarm = false) {
795
867
  this.config = {
796
868
  agent: { self: { ...agent.self }, goal: { ...agent.goal } },
869
+ linkAgent: { self: agent.self, goal: agent.goal },
797
870
  harm: 0,
798
871
  default_harm: 0,
799
872
  isRealHarm: realHarm,
800
873
  isEvasion: false,
801
874
  isCsp: false,
802
875
  isBadDef: false,
803
- reductionVal: 0
876
+ reductionVal: 0,
877
+ passiveMsg: []
804
878
  };
805
879
  }
806
880
  /** 伤害判定前 */
@@ -872,9 +946,12 @@ var Damage = class {
872
946
  }
873
947
  }
874
948
  fn && fn(this.config);
875
- if (this.config.agent.self.passiveList?.length) {
876
- this.config.agent.self.passiveList.forEach((passiveName) => {
877
- PassiveFn[passiveName].damageFn(this.config);
949
+ if (this.config.linkAgent.self.passiveList?.length) {
950
+ this.config.linkAgent.self.passiveList.forEach((passiveName) => {
951
+ if (PassiveFn[passiveName].type == "atk") {
952
+ const msg = PassiveFn[passiveName].damageFn(this.config);
953
+ msg && this.config.passiveMsg.push(msg);
954
+ }
878
955
  });
879
956
  }
880
957
  return this;
@@ -922,6 +999,14 @@ var BuffDamage = class {
922
999
  }
923
1000
  };
924
1001
  function giveDamage(self, goal, damage) {
1002
+ if (damage.linkAgent.goal.passiveList?.length) {
1003
+ damage.linkAgent.goal.passiveList.forEach((passiveName) => {
1004
+ if (PassiveFn[passiveName].type == "hit") {
1005
+ const msg = PassiveFn[passiveName].damageFn(damage);
1006
+ msg && damage.passiveMsg.push(msg);
1007
+ }
1008
+ });
1009
+ }
925
1010
  if (goal.hp - damage.harm > 0) {
926
1011
  goal.hp -= damage.harm;
927
1012
  return damage.harm;
@@ -955,9 +1040,13 @@ function giveCure(goal, val, fn) {
955
1040
  }
956
1041
  __name(giveCure, "giveCure");
957
1042
  function moreDamageInfo(damage) {
958
- return (damage.isCsp ? `(暴击!)` : "") + (damage.isEvasion ? `(闪避成功!)` : "") + (damage.isBadDef ? `(未破防!)` : "") + (damage.isRealHarm ? `(真实伤害)` : "");
1043
+ return (damage.isCsp ? `(暴击!)` : "") + (damage.isEvasion ? `(闪避!)` : "") + (damage.isBadDef ? `(未破防!)` : "") + (damage.isRealHarm ? `(真实伤害)` : "");
959
1044
  }
960
1045
  __name(moreDamageInfo, "moreDamageInfo");
1046
+ function baseMoreDamage(damageInfo) {
1047
+ return moreDamageInfo(damageInfo) + (damageInfo.passiveMsg.length ? "\n" + damageInfo.passiveMsg.join("‣") : "");
1048
+ }
1049
+ __name(baseMoreDamage, "baseMoreDamage");
961
1050
 
962
1051
  // src/data/skillFn.ts
963
1052
  var skillFn = {
@@ -981,7 +1070,7 @@ var skillFn = {
981
1070
  target: [agent.goal],
982
1071
  isNext: false
983
1072
  });
984
- return `${getLineupName(agent.self)} 释放重砍,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + moreDamageInfo(damageData);
1073
+ return `${getLineupName(agent.self)} 释放重砍,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
985
1074
  }, "fn")
986
1075
  },
987
1076
  "突刺": {
@@ -1004,7 +1093,7 @@ var skillFn = {
1004
1093
  target: [agent.goal],
1005
1094
  isNext: false
1006
1095
  });
1007
- return `${getLineupName(agent.self)} 释放突刺,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + moreDamageInfo(damageData);
1096
+ return `${getLineupName(agent.self)} 释放突刺,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
1008
1097
  }, "fn")
1009
1098
  },
1010
1099
  "水炮": {
@@ -1026,7 +1115,7 @@ var skillFn = {
1026
1115
  target: [agent.goal],
1027
1116
  isNext: false
1028
1117
  });
1029
- return `${getLineupName(agent.self)} 释放水炮,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + moreDamageInfo(damageData);
1118
+ return `${getLineupName(agent.self)} 释放水炮,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
1030
1119
  }, "fn")
1031
1120
  },
1032
1121
  "濒死一击": {
@@ -1049,7 +1138,7 @@ var skillFn = {
1049
1138
  target: [agent.goal],
1050
1139
  isNext: false
1051
1140
  });
1052
- return `${getLineupName(agent.self)} 释放濒死一击,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + moreDamageInfo(damageData);
1141
+ return `${getLineupName(agent.self)} 释放濒死一击,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
1053
1142
  } else {
1054
1143
  fn({
1055
1144
  type: "释放失败" /* 释放失败 */,
@@ -1098,7 +1187,7 @@ var skillFn = {
1098
1187
  target: [agent.goal],
1099
1188
  isNext: false
1100
1189
  });
1101
- return `${getLineupName(agent.self)} 进行垂死挣扎,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + moreDamageInfo(damageData);
1190
+ return `${getLineupName(agent.self)} 进行垂死挣扎,对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。` + baseMoreDamage(damageData);
1102
1191
  }, "fn")
1103
1192
  },
1104
1193
  "治愈之光": {
@@ -1144,7 +1233,7 @@ var skillFn = {
1144
1233
  isNext: false,
1145
1234
  target: [goal]
1146
1235
  });
1147
- msgList.push(`- 对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` + moreDamageInfo(damageData));
1236
+ msgList.push(`- 对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` + baseMoreDamage(damageData));
1148
1237
  });
1149
1238
  return msgList.join("\n");
1150
1239
  }, "fn")
@@ -1174,7 +1263,7 @@ var skillFn = {
1174
1263
  isNext: false,
1175
1264
  target: [agent.goal]
1176
1265
  });
1177
- return `${getLineupName(agent.self)} 发动恐怖催眠术!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(晕眩)" : ""}` + moreDamageInfo(damageData);
1266
+ return `${getLineupName(agent.self)} 发动恐怖催眠术!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(晕眩)" : ""}` + baseMoreDamage(damageData);
1178
1267
  }, "fn")
1179
1268
  },
1180
1269
  "恐怖的回忆": {
@@ -1287,7 +1376,7 @@ var skillFn = {
1287
1376
  isNext: false,
1288
1377
  target: [agent.goal]
1289
1378
  });
1290
- return `${getLineupName(agent.self)} 发动无意识行动!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(沉默)" : ""}` + moreDamageInfo(damageData);
1379
+ return `${getLineupName(agent.self)} 发动无意识行动!对 ${getLineupName(agent.goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(沉默)" : ""}` + baseMoreDamage(damageData);
1291
1380
  }, "fn")
1292
1381
  }
1293
1382
  };
@@ -1713,7 +1802,7 @@ MP:${item.mp}/${item.maxMp + item.gain.maxMp}`);
1713
1802
  const damageInfo = new Damage({ self: agent, goal: selectGoal }).result();
1714
1803
  giveDamage(agent, selectGoal, damageInfo);
1715
1804
  msgList.push(
1716
- `${getLineupName(agent)} 使用普攻攻击了 ${getLineupName(selectGoal)},造成了${damageInfo.harm}伤害。` + moreDamageInfo(damageInfo)
1805
+ `${getLineupName(agent)} 使用普攻攻击了 ${getLineupName(selectGoal)},造成了${damageInfo.harm}伤害。` + baseMoreDamage(damageInfo)
1717
1806
  );
1718
1807
  }, "noralAtk");
1719
1808
  if (funType == "普攻" || agent.gain.silence) {
@@ -3724,7 +3813,20 @@ function apply(ctx, config) {
3724
3813
  if (!goal) return `请输入技能名,例如 /技能查询 重砍`;
3725
3814
  if (!skillFn[goal]) return `没有存在 ${goal} 技能!`;
3726
3815
  return `[${goal}]信息如下:
3727
- ` + skillFn[goal].info;
3816
+ ` + skillFn[goal].info + `
3817
+ 消耗MP:${skillFn[goal].mp}`;
3818
+ });
3819
+ ctx.command("幻想乡/被动查询 <goal>").action(async ({ session }, goal) => {
3820
+ if (!goal) return `请输入被动名,例如 /被动查询 吸血`;
3821
+ if (!PassiveFn[goal]) return `没有存在 ${goal} 被动!`;
3822
+ return `[${goal}]信息如下:
3823
+ ` + PassiveFn[goal].info;
3824
+ });
3825
+ ctx.command("幻想乡/状态查询 <goal>").action(async ({ session }, goal) => {
3826
+ if (!goal) return `请输入技能名,例如 /状态查询 治愈`;
3827
+ if (!BuffFn[goal]) return `没有存在 ${goal} 状态!`;
3828
+ return `[${goal}]信息如下:
3829
+ ` + BuffFn[goal].info;
3728
3830
  });
3729
3831
  const temp = {};
3730
3832
  ctx.command("幻想乡/补给").action(async ({ session }) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-smmcat-gensokyo",
3
3
  "description": "名为《幻想乡》的文字冒险游戏",
4
- "version": "0.0.41",
4
+ "version": "0.0.42",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [