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 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,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.agent.self.passiveList?.length) {
876
- this.config.agent.self.passiveList.forEach((passiveName) => {
877
- PassiveFn[passiveName].damageFn(this.config);
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 ? `(闪避成功!)` : "") + (damage.isBadDef ? `(未破防!)` : "") + (damage.isRealHarm ? `(真实伤害)` : "");
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} 伤害。` + moreDamageInfo(damageData);
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} 伤害。` + moreDamageInfo(damageData);
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} 伤害。` + moreDamageInfo(damageData);
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} 伤害。` + moreDamageInfo(damageData);
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} 伤害。` + moreDamageInfo(damageData);
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 ? "(中毒)" : ""}` + moreDamageInfo(damageData));
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 ? "(晕眩)" : ""}` + moreDamageInfo(damageData);
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 ? "(沉默)" : ""}` + moreDamageInfo(damageData);
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}伤害。` + moreDamageInfo(damageInfo)
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
- right: "大草场"
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 }) => {
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.43",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [