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 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
  }
@@ -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}:${upMsg.join("、")}`);
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})`).join("\n") : null;
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(`对 ${getLineupName(goal)} 造成 ${damageData.harm} 伤害。${useBuff ? "(中毒)" : ""}` + moreDamageInfo(damageData));
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.name !== agent.name && item.hp > 0);
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
- await session.send(`小队获得${val}EXP、${monetary}货币!`);
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
@@ -1,8 +1 @@
1
- declare const fn: {
2
- name: string;
3
- prob: number;
4
- }[];
5
- declare function useAtkFn(fnList: {
6
- name: string;
7
- prob: number;
8
- }[]): string;
1
+ declare let a: number;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-smmcat-gensokyo",
3
3
  "description": "名为《幻想乡》的文字冒险游戏",
4
- "version": "0.0.26",
4
+ "version": "0.0.28",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [