koishi-plugin-ggcevo-game 1.0.8 → 1.0.10

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/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare const name = "ggcevo-game";
4
4
  export interface Config {
5
5
  proxyAgent: string;
6
6
  ggcqun: string;
7
+ rankseason: string;
7
8
  signrequire: boolean;
8
9
  autorank: boolean;
9
10
  ignoreGlobalLimit: boolean;
@@ -87,6 +88,7 @@ export interface exchange {
87
88
  type: string;
88
89
  date: Date;
89
90
  GlobalLimit: boolean;
91
+ season: string;
90
92
  }
91
93
  export interface adminbenefit {
92
94
  userId: string;
package/lib/index.js CHANGED
@@ -32,6 +32,7 @@ var name = "ggcevo-game";
32
32
  var Config = import_koishi.Schema.object({
33
33
  proxyAgent: import_koishi.Schema.string().description("代理服务器地址"),
34
34
  ggcqun: import_koishi.Schema.string().description("开启咕咕虫排行榜的群组").required(),
35
+ rankseason: import_koishi.Schema.string().description("当前赛季").required(),
35
36
  signrequire: import_koishi.Schema.boolean().description("是否开启签到要求进行一场游戏").default(true),
36
37
  autorank: import_koishi.Schema.boolean().description("是否开启每小时自动同步rank数据").default(true),
37
38
  ignoreGlobalLimit: import_koishi.Schema.boolean().description("是否开启无限制兑换").default(false),
@@ -137,7 +138,9 @@ function apply(ctx, config) {
137
138
  // 兑换物品
138
139
  type: "string",
139
140
  date: "timestamp",
140
- GlobalLimit: "boolean"
141
+ GlobalLimit: "boolean",
142
+ season: "string"
143
+ // 新增赛季字段
141
144
  }, {
142
145
  primary: ["handle", "item"]
143
146
  });
@@ -1040,40 +1043,62 @@ ID:${activity.id}
1040
1043
  ].join("\n");
1041
1044
  });
1042
1045
  const itemConfig = {
1043
- "拾荒者": { quality: "t3", type: "皮肤", cost: 3 },
1044
- "劳工": { quality: "t3", type: "皮肤", cost: 3 },
1045
- "老兵": { quality: "t2", type: "皮肤", cost: 4 },
1046
- "合成人": { quality: "t2", type: "皮肤", cost: 4 },
1047
- "阿斯塔特": { quality: "t1", type: "皮肤", cost: 5 },
1048
- "皇家指挥官": { quality: "t1", type: "皮肤", cost: 5 },
1049
- "个性开场白": { quality: "t1", type: "“入场特效", cost: 5, quantity: 5 },
1050
- "史蒂夫": { quality: "t0", type: "皮肤", cost: 6, quantity: 1 },
1051
- "ep4": { quality: "t0", type: "物品", cost: 6, quantity: 3 },
1052
- "小狗": { quality: "t3", type: "宠物", cost: 3, quantity: 5 },
1053
- "小猫": { quality: "t3", type: "宠物", cost: 3, quantity: 5 },
1054
- "小黄鸭": { quality: "t3", type: "宠物", cost: 3, quantity: 5 },
1055
- "萌萌熊": { quality: "t2", type: "宠物", cost: 4, quantity: 3 },
1056
- "荆棘蜥蜴": { quality: "t2", type: "宠物", cost: 4, quantity: 3 },
1057
- "萌宠小狗": { quality: "t1", type: "宠物", cost: 5, quantity: 2 },
1058
- "熔岩虫": { quality: "t1", type: "宠物", cost: 5, quantity: 2 },
1059
- "尸甲虫": { quality: "t1", type: "宠物", cost: 5, quantity: 2 },
1060
- "绿毛虫": { quality: "t0", type: "宠物", cost: 6, quantity: 1 },
1061
- "妙蛙种子": { quality: "t0", type: "宠物", cost: 6, quantity: 1 },
1062
- "皮卡丘": { quality: "t0", type: "宠物", cost: 6, quantity: 1 },
1063
- "哆啦A梦": { quality: "t0", type: "宠物", cost: 6, quantity: 1 }
1046
+ "拾荒者": { quality: "t3", type: "皮肤", cost: 3, isLimited: false },
1047
+ "劳工": { quality: "t3", type: "皮肤", cost: 3, isLimited: false },
1048
+ "老兵": { quality: "t2", type: "皮肤", cost: 4, isLimited: false },
1049
+ "合成人": { quality: "t2", type: "皮肤", cost: 4, isLimited: false },
1050
+ "阿斯塔特": { quality: "t1", type: "皮肤", cost: 5, isLimited: false },
1051
+ "皇家指挥官": { quality: "t1", type: "皮肤", cost: 5, isLimited: false },
1052
+ "个性开场白": { quality: "t1", type: "“入场特效", cost: 5, quantity: 5, isLimited: false },
1053
+ "史蒂夫": { quality: "t0", type: "皮肤", cost: 6, quantity: 1, isLimited: true },
1054
+ "ep4": { quality: "t0", type: "物品", cost: 6, quantity: 3, isLimited: false },
1055
+ "小狗": { quality: "t3", type: "宠物", cost: 3, quantity: 5, isLimited: false },
1056
+ "小猫": { quality: "t3", type: "宠物", cost: 3, quantity: 5, isLimited: false },
1057
+ "小黄鸭": { quality: "t3", type: "宠物", cost: 3, quantity: 5, isLimited: false },
1058
+ "萌萌熊": { quality: "t2", type: "宠物", cost: 4, quantity: 3, isLimited: false },
1059
+ "荆棘蜥蜴": { quality: "t2", type: "宠物", cost: 4, quantity: 3, isLimited: false },
1060
+ "萌宠小狗": { quality: "t1", type: "宠物", cost: 5, quantity: 2, isLimited: false },
1061
+ "熔岩虫": { quality: "t1", type: "宠物", cost: 5, quantity: 2, isLimited: false },
1062
+ "尸甲虫": { quality: "t1", type: "宠物", cost: 5, quantity: 2, isLimited: false },
1063
+ "绿毛虫": { quality: "t0", type: "宠物", cost: 6, quantity: 1, isLimited: false },
1064
+ "妙蛙种子": { quality: "t0", type: "宠物", cost: 6, quantity: 1, isLimited: false },
1065
+ "皮卡丘": { quality: "t0", type: "宠物", cost: 6, quantity: 1, isLimited: false },
1066
+ "哆啦A梦": { quality: "t0", type: "宠物", cost: 6, quantity: 1, isLimited: false }
1064
1067
  };
1065
1068
  ctx.command("ggcevo/兑换", "兑换物品").action(async ({ session }) => {
1066
1069
  try {
1067
1070
  const [profile] = await ctx.database.get("sc2arcade_player", { userId: session.userId });
1068
1071
  if (!profile) return "您的 QQ 未绑定句柄";
1072
+ const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
1073
+ const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
1074
+ if (existingEntries.length > 0) {
1075
+ return `❌拒绝访问,您已被列入活动黑名单。`;
1076
+ }
1077
+ const currentSeason = config.rankseason;
1069
1078
  const qualityGroups = {};
1070
1079
  for (const [itemName, config2] of Object.entries(itemConfig)) {
1071
- const quality = config2.quality;
1080
+ const configname2 = config2;
1081
+ const quality = configname2.quality;
1072
1082
  if (!qualityGroups[quality]) qualityGroups[quality] = [];
1073
- qualityGroups[quality].push(itemName);
1083
+ let quantityText = "";
1084
+ if (configname2.quantity !== void 0) {
1085
+ const queryConditions = {
1086
+ item: itemName,
1087
+ GlobalLimit: true
1088
+ };
1089
+ if (itemName !== "史蒂夫") {
1090
+ queryConditions.season = currentSeason;
1091
+ }
1092
+ const records = await ctx.database.get("ggcevo_exchange", queryConditions);
1093
+ const remaining = Math.max(configname2.quantity - records.length, 0);
1094
+ quantityText = ` [${remaining}/${configname2.quantity}]`;
1095
+ } else {
1096
+ quantityText = " [无限]";
1097
+ }
1098
+ qualityGroups[quality].push(`${itemName}${quantityText}`);
1074
1099
  }
1075
1100
  const order = ["t0", "t1", "t2", "t3"];
1076
- let message = "请在30秒内输入要兑换的物品名称,可兑换物品(按品质分类):\n";
1101
+ let message = "请在30秒内输入可兑换物品(显示格式:物品名 [剩余/总量]):\n";
1077
1102
  for (const quality of order) {
1078
1103
  const items = qualityGroups[quality] || [];
1079
1104
  if (!items.length) continue;
@@ -1085,18 +1110,20 @@ ${items.join("、")}
1085
1110
  await session.send(message);
1086
1111
  const name2 = await session.prompt(3e4);
1087
1112
  if (!name2) return "输入超时,请重新输入指令。";
1088
- const handle = `${profile.regionId}-S2-${profile.realmId}-${profile.profileId}`;
1089
- const existingEntries = await ctx.database.get("ggcevo_blacklist", { handle });
1090
- if (existingEntries.length > 0) {
1091
- return `❌拒绝访问,您已被列入活动黑名单。`;
1092
- }
1093
1113
  const configname = itemConfig[name2];
1094
1114
  if (!configname) return "无效的物品名称,请重新输入";
1095
1115
  const userRecords = await ctx.database.get("ggcevo_exchange", { handle, item: name2 });
1096
1116
  if (userRecords.length > 0) return "您已经兑换过该物品";
1097
- if (configname.quantity !== void 0 && config.ignoreGlobalLimit === false) {
1098
- const globalRecords = await ctx.database.get("ggcevo_exchange", { item: name2, GlobalLimit: true });
1099
- if (globalRecords.length >= configname.quantity) return "该物品已被兑换尽了";
1117
+ if (configname.quantity !== void 0 && (configname.isLimited || config.ignoreGlobalLimit === false)) {
1118
+ const queryConditions = {
1119
+ item: name2,
1120
+ GlobalLimit: true
1121
+ };
1122
+ if (name2 !== "史蒂夫") {
1123
+ queryConditions.season = currentSeason;
1124
+ }
1125
+ const globalRecords = await ctx.database.get("ggcevo_exchange", queryConditions);
1126
+ if (globalRecords.length >= configname.quantity) return "该物品已被兑换尽";
1100
1127
  }
1101
1128
  const qualityMap = { "t3": 4, "t2": 5, "t1": 6, "t0": 7 };
1102
1129
  const petItems = new Set(
@@ -1123,7 +1150,7 @@ ${items.join("、")}
1123
1150
  return `${requireMsg}
1124
1151
  当前持有:${coupon?.quantity || 0}个${couponName}`;
1125
1152
  }
1126
- const isGlobal = config.ignoreGlobalLimit === false;
1153
+ const isGlobal = configname.isLimited || config.ignoreGlobalLimit === false;
1127
1154
  await ctx.database.withTransaction(async () => {
1128
1155
  await ctx.database.set(
1129
1156
  "ggcevo_backpack",
@@ -1137,8 +1164,9 @@ ${items.join("、")}
1137
1164
  type: configname.type,
1138
1165
  // 从配置中获取类型
1139
1166
  date: /* @__PURE__ */ new Date(),
1140
- GlobalLimit: isGlobal
1167
+ GlobalLimit: isGlobal,
1141
1168
  // 关键字段设置
1169
+ season: currentSeason
1142
1170
  });
1143
1171
  });
1144
1172
  return `兑换成功!消耗 ${cost} 个${couponName}获得【${name2}】`;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-ggcevo-game",
3
3
  "description": "星际争霸2游戏大厅咕咕虫-Evo地图专属插件",
4
- "version": "1.0.8",
4
+ "version": "1.0.10",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [