koishi-plugin-toram
Version:
683 lines (668 loc) • 26.8 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name2 in all)
__defProp(target, name2, { get: all[name2], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
Config: () => Config,
apply: () => apply,
inject: () => inject,
name: () => name
});
module.exports = __toCommonJS(src_exports);
var import_koishi = require("koishi");
// src/script/dish/dishClass.ts
var DishType = /* @__PURE__ */ ((DishType2) => {
DishType2[DishType2["null"] = 0] = "null";
DishType2[DishType2["起司吐司"] = 1] = "起司吐司";
DishType2[DishType2["布丁吐司"] = 2] = "布丁吐司";
DishType2[DishType2["鲔鱼吐司"] = 3] = "鲔鱼吐司";
DishType2[DishType2["煎蛋吐司"] = 4] = "煎蛋吐司";
DishType2[DishType2["蜂蜜吐司"] = 5] = "蜂蜜吐司";
DishType2[DishType2["香蒜吐司"] = 6] = "香蒜吐司";
DishType2[DishType2["香草吐司"] = 7] = "香草吐司";
DishType2[DishType2["那不勒斯意大利面"] = 8] = "那不勒斯意大利面";
DishType2[DishType2["蛤蜊意大利面"] = 9] = "蛤蜊意大利面";
DishType2[DishType2["肉酱意大利面"] = 10] = "肉酱意大利面";
DishType2[DishType2["青酱意大利面"] = 11] = "青酱意大利面";
DishType2[DishType2["奶油培根意大利面"] = 12] = "奶油培根意大利面";
DishType2[DishType2["墨鱼意大利面"] = 13] = "墨鱼意大利面";
DishType2[DishType2["香蒜辣椒意大利面"] = 14] = "香蒜辣椒意大利面";
DishType2[DishType2["烩炒饭"] = 15] = "烩炒饭";
DishType2[DishType2["黄金炒饭"] = 16] = "黄金炒饭";
DishType2[DishType2["玛格丽特披萨"] = 17] = "玛格丽特披萨";
DishType2[DishType2["辣香肠披萨"] = 18] = "辣香肠披萨";
DishType2[DishType2["海鲜披萨"] = 19] = "海鲜披萨";
DishType2[DishType2["鱼排汉堡"] = 20] = "鱼排汉堡";
DishType2[DishType2["牛肉汉堡"] = 21] = "牛肉汉堡";
DishType2[DishType2["鲣鱼饭团"] = 22] = "鲣鱼饭团";
DishType2[DishType2["梅干饭团"] = 23] = "梅干饭团";
DishType2[DishType2["鲑鱼饭团"] = 24] = "鲑鱼饭团";
DishType2[DishType2["明太子饭团"] = 25] = "明太子饭团";
DishType2[DishType2["金枪鱼蛋黄酱饭团"] = 26] = "金枪鱼蛋黄酱饭团";
DishType2[DishType2["酱油拉面"] = 27] = "酱油拉面";
DishType2[DishType2["盐味拉面"] = 28] = "盐味拉面";
DishType2[DishType2["豚骨拉面"] = 29] = "豚骨拉面";
DishType2[DishType2["味增拉面"] = 30] = "味增拉面";
DishType2[DishType2["水果百汇"] = 31] = "水果百汇";
DishType2[DishType2["巧克力百汇"] = 32] = "巧克力百汇";
DishType2[DishType2["巧克力蛋糕"] = 33] = "巧克力蛋糕";
DishType2[DishType2["起司蛋糕"] = 34] = "起司蛋糕";
DishType2[DishType2["美式松饼"] = 35] = "美式松饼";
DishType2[DishType2["奶油炖菜"] = 36] = "奶油炖菜";
DishType2[DishType2["炖牛肉"] = 37] = "炖牛肉";
DishType2[DishType2["日式炒面"] = 38] = "日式炒面";
DishType2[DishType2["章鱼烧"] = 39] = "章鱼烧";
return DishType2;
})(DishType || {});
var DishUse = /* @__PURE__ */ ((DishUse2) => {
DishUse2[DishUse2["null"] = 0] = "null";
DishUse2[DishUse2["风属性抗性"] = 1] = "风属性抗性";
DishUse2[DishUse2["地属性抗性"] = 2] = "地属性抗性";
DishUse2[DishUse2["水属性抗性"] = 3] = "水属性抗性";
DishUse2[DishUse2["火属性抗性"] = 4] = "火属性抗性";
DishUse2[DishUse2["光属性抗性"] = 5] = "光属性抗性";
DishUse2[DishUse2["暗属性抗性"] = 6] = "暗属性抗性";
DishUse2[DishUse2["无属性抗性"] = 7] = "无属性抗性";
DishUse2[DishUse2["对风属性伤害"] = 8] = "对风属性伤害";
DishUse2[DishUse2["对水属性伤害"] = 9] = "对水属性伤害";
DishUse2[DishUse2["对火属性伤害"] = 10] = "对火属性伤害";
DishUse2[DishUse2["对地属性伤害"] = 11] = "对地属性伤害";
DishUse2[DishUse2["对光属性伤害"] = 12] = "对光属性伤害";
DishUse2[DishUse2["对暗属性伤害"] = 13] = "对暗属性伤害";
DishUse2[DishUse2["对无属性伤害"] = 14] = "对无属性伤害";
DishUse2[DishUse2["魔法值上限"] = 15] = "魔法值上限";
DishUse2[DishUse2["体力值上限"] = 16] = "体力值上限";
DishUse2[DishUse2["武器物理攻击"] = 17] = "武器物理攻击";
DishUse2[DishUse2["物理攻击"] = 18] = "物理攻击";
DishUse2[DishUse2["魔法攻击"] = 19] = "魔法攻击";
DishUse2[DishUse2["魔法抗性"] = 20] = "魔法抗性";
DishUse2[DishUse2["物理抗性"] = 21] = "物理抗性";
DishUse2[DishUse2["力量"] = 22] = "力量";
DishUse2[DishUse2["智力"] = 23] = "智力";
DishUse2[DishUse2["灵巧"] = 24] = "灵巧";
DishUse2[DishUse2["敏捷"] = 25] = "敏捷";
DishUse2[DishUse2["耐力"] = 26] = "耐力";
DishUse2[DishUse2["命中"] = 27] = "命中";
DishUse2[DishUse2["回避"] = 28] = "回避";
DishUse2[DishUse2["物理防御"] = 29] = "物理防御";
DishUse2[DishUse2["魔法防御"] = 30] = "魔法防御";
DishUse2[DishUse2["掉宝率加成"] = 31] = "掉宝率加成";
DishUse2[DishUse2["经验值加成"] = 32] = "经验值加成";
DishUse2[DishUse2["物理屏障"] = 33] = "物理屏障";
DishUse2[DishUse2["魔法屏障"] = 34] = "魔法屏障";
DishUse2[DishUse2["百分比屏障"] = 35] = "百分比屏障";
DishUse2[DishUse2["仇恨值减少"] = 36] = "仇恨值减少";
DishUse2[DishUse2["仇恨值增加"] = 37] = "仇恨值增加";
DishUse2[DishUse2["攻击魔法回复"] = 38] = "攻击魔法回复";
DishUse2[DishUse2["暴击率"] = 39] = "暴击率";
return DishUse2;
})(DishUse || {});
// src/script/JsonMgr.ts
var import_promises = __toESM(require("fs/promises"));
var import_path = __toESM(require("path"));
var _JsonMgr = class _JsonMgr {
constructor() {
this._json = /* @__PURE__ */ new Map();
this._logger = null;
}
static Inst() {
if (!_JsonMgr.instance) {
_JsonMgr.instance = new _JsonMgr();
}
return _JsonMgr.instance;
}
/**
* 异步获取 ./external/toram/src/json 目录下的所有JSON文件,并将其内容解析后存储到内部的Map对象中。
* 该方法会遍历指定目录下的所有文件,筛选出扩展名为.json的文件,然后读取每个文件的内容,
* 将其解析为JavaScript对象,并以文件名作为键,解析后的对象作为值存储在内部的Map对象中。
* 如果在读取文件或解析JSON时发生错误,将在控制台输出错误信息。
*/
async loadJson() {
const arr = __dirname.split("\\");
if (arr[arr.length - 1] !== "lib") arr.pop();
arr.push("json");
const pathWay = arr.join("\\");
this._logger.info(pathWay);
try {
const files = await import_promises.default.readdir(pathWay);
const jsonFiles = files.filter((file) => import_path.default.extname(file).toLowerCase() === ".json");
for (const file of jsonFiles) {
const filePath = import_path.default.join(pathWay, file);
try {
const data = await import_promises.default.readFile(filePath, "utf-8");
this._json.set(file, JSON.parse(data));
} catch (readErr) {
console.error(`Error reading file ${filePath}:`, readErr);
}
}
} catch (err) {
console.error(`Error reading directory ${pathWay}:`, err);
}
}
/**
* 根据指定的名称从内部的Map对象中获取对应的JSON数据。
* 该方法会在内部的Map对象中查找与给定名称匹配的键,并返回对应的值。
* 如果找不到匹配的键,则返回undefined。
* @param name - 要获取的JSON数据的名称,通常是文件名(不包括扩展名)。
* @returns 返回与指定名称对应的JSON数据,如果找不到则打印log并返回null。
*/
getJson(name2) {
const result = this._json.get(name2);
if (result) {
return result;
} else {
this._logger.error(`未找到${name2}`);
return null;
}
}
/**
* 设置日志记录器实例,用于记录JsonMgr类的操作日志。
* 该方法允许外部传入一个Logger实例,以便在JsonMgr类的各个方法中使用该实例进行日志记录。
* @param logger - 一个Logger实例,用于记录日志。
*/
setLogger(logger) {
this._logger = logger;
}
/** 保存json */
async saveJson(name2, data) {
if (!data) data = this._json.get(name2);
const arr = __dirname.split("\\");
if (arr[arr.length - 1] !== "lib") arr.pop();
arr.push("json");
const pathWay = arr.join("\\");
const filePath = import_path.default.join(pathWay, "", name2);
const jsonString = JSON.stringify(data, null, 2);
try {
import_promises.default.writeFile(filePath, jsonString, "utf8");
console.log("JSON 文件已保存!");
} catch (err) {
console.error("保存文件时出错:", err);
}
}
};
__name(_JsonMgr, "JsonMgr");
_JsonMgr.instance = null;
var JsonMgr = _JsonMgr;
// src/script/ReplyMgr.ts
var _ReplyMgr = class _ReplyMgr {
constructor() {
this._replys = /* @__PURE__ */ new Map();
}
static Inst() {
if (!_ReplyMgr.instance) {
_ReplyMgr.instance = new _ReplyMgr();
}
return _ReplyMgr.instance;
}
setReplys() {
const data = JsonMgr.Inst().getJson("replys.json");
Object.keys(data).forEach((key) => {
this._replys.set(key, data[key]);
});
}
reply(event, replyType, args) {
const replyList = this._replys.get(replyType);
let reply = replyList[Math.floor(Math.random() * replyList.length)];
if (args) Object.keys(args).forEach((key) => reply = reply.replace(`@_${key}_@`, args[key]));
event.session.send(reply);
}
};
__name(_ReplyMgr, "ReplyMgr");
_ReplyMgr.instance = null;
var ReplyMgr = _ReplyMgr;
// src/script/ResultClass.ts
var _Result = class _Result {
constructor(code, result) {
this.code = 1001 /* 通过 */;
this.code = code;
if (result !== void 0) this.result = result;
}
};
__name(_Result, "Result");
var Result = _Result;
// src/script/player/PlayerMgr.ts
var _PlayerMgr = class _PlayerMgr {
static Inst() {
if (!_PlayerMgr.instance) {
_PlayerMgr.instance = new _PlayerMgr();
}
return _PlayerMgr.instance;
}
async setConfigs(ctx) {
this._ctx = ctx;
}
async getPlayerListByPartName(name2) {
const playerList = await this._ctx.database.get("player", { nickname: { $regex: name2 } });
if (playerList.length === 0) return new Result(3001 /* 未找到玩家 */);
return new Result(1001 /* 通过 */, playerList);
}
};
__name(_PlayerMgr, "PlayerMgr");
_PlayerMgr.instance = null;
var PlayerMgr = _PlayerMgr;
// src/script/dish/DishMgr.ts
var _DishMgr = class _DishMgr {
constructor() {
this._dishNameConfigs = /* @__PURE__ */ new Map();
this.setDishNameConfigs();
}
static Inst() {
if (!_DishMgr.instance) {
_DishMgr.instance = new _DishMgr();
}
return _DishMgr.instance;
}
async setConfigs(ctx) {
this._ctx = ctx;
}
setDishNameConfigs() {
const json = JsonMgr.Inst().getJson("dishesTypeNames.json");
for (const dishType in json) {
if (json.hasOwnProperty(dishType)) {
json[dishType].forEach((name2) => this._dishNameConfigs.set(name2, DishType[dishType]));
}
}
}
getDishTypeByName(name2) {
const dishType = this._dishNameConfigs.get(name2);
if (dishType === void 0) return 0 /* null */;
return dishType;
}
async getDishDatasByType(type, dishes) {
let fDishes = [];
if (dishes) {
fDishes = dishes.filter((v) => v.type == type);
} else {
const dishList = await this._ctx.database.get("dish", { type });
fDishes = [...dishList];
}
if (fDishes.length === 0) return new Result(3002 /* 未找到料理 */);
return new Result(1001 /* 通过 */, fDishes);
}
async getDishDatasByLevel(level, dishes) {
let fDishes = [];
if (dishes) {
fDishes = dishes.filter((v) => v.level === level);
} else {
const dishList = await this._ctx.database.get("dish", { level });
fDishes = [...dishList];
}
if (fDishes.length === 0) return new Result(3002 /* 未找到料理 */);
return new Result(1001 /* 通过 */, fDishes);
}
};
__name(_DishMgr, "DishMgr");
_DishMgr.instance = null;
var DishMgr = _DishMgr;
// src/script/command/dishCommand.ts
async function command_dishes(event, args) {
const checkResult = checkArgs(args);
switch (checkResult.code) {
case 2001 /* 参数缺失 */:
ReplyMgr.Inst().reply(event, "料理命令_参数缺失");
return;
case 2002 /* 等级不正确 */:
ReplyMgr.Inst().reply(event, "料理命令_等级错误");
return;
}
let title = "";
let result = "";
let tips = "";
const { name: name2, type, level } = checkResult.result;
if (name2) {
title = "你在找下面这些玩家的料理吗?";
const getPlayerList = await PlayerMgr.Inst().getPlayerListByPartName(name2);
if (getPlayerList.code === 3001 /* 未找到玩家 */) {
ReplyMgr.Inst().reply(event, "料理命令_未找到玩家");
return;
}
let playerList = getPlayerList.result;
playerList = playerList.filter((player) => JSON.parse(player.dishes).length > 0);
if (playerList.length > 10) {
playerList = playerList.slice(0, 10);
tips = `
......
名字带有"${name2}"的玩家有很多呢?需要仔细想想你想找的玩家叫什么吗?`;
}
result = "\n" + playerList.map((data, i) => {
const dishes = JSON.parse(data.dishes);
return `${i + 1}.${data.nickname}:${dishes.map((dish) => `${DishUse[DishType[dish.type]]}(${dish.level}级)`).join("、")}`;
}).join("\n");
} else {
let getDishList = await DishMgr.Inst().getDishDatasByType(type);
if (getDishList.code === 3002 /* 未找到料理 */) {
ReplyMgr.Inst().reply(event, "料理命令_未找到料理");
return;
}
let dishList = getDishList.result.sort((a, b) => a.player.localeCompare(b.player));
const dishTypeName = DishType[type];
if (level) {
title = `${level}级${args[0]}(${dishTypeName})的料理名单如下:`;
getDishList = await DishMgr.Inst().getDishDatasByLevel(level, dishList);
if (getDishList.code === 3002 /* 未找到料理 */) {
ReplyMgr.Inst().reply(event, "料理命令_未找到料理");
return;
}
dishList = getDishList.result;
result = `
${dishList.map((data) => data.player).join("、")}`;
} else {
title = `高级${args[0]}(${dishTypeName})的料理名单如下:`;
let count = 0;
const results = [];
for (let i = 10; i > 0; i--) {
getDishList = await DishMgr.Inst().getDishDatasByLevel(i, dishList);
if (getDishList.code === 3002 /* 未找到料理 */) continue;
count += getDishList.result.length;
results.push(`${i}级:
${getDishList.result.map((data) => data.player).join("、")}`);
if (count >= event.config.dishes_return) break;
}
result = `
${results.join("\n")}`;
}
}
ReplyMgr.Inst().reply(event, "正常回复", { title, result, tips });
}
__name(command_dishes, "command_dishes");
function checkArgs(args) {
const name2 = args[0], levelCN = args[1];
if (name2 === void 0) return new Result(2001 /* 参数缺失 */);
const type = DishMgr.Inst().getDishTypeByName(name2);
if (type === 0 /* null */) return new Result(1001 /* 通过 */, { name: name2 });
if (levelCN !== void 0) {
const level = toDishLevel(levelCN);
if (!level) return new Result(2002 /* 等级不正确 */);
return new Result(1001 /* 通过 */, { type, level });
}
return new Result(1001 /* 通过 */, { type });
}
__name(checkArgs, "checkArgs");
function toDishLevel(level) {
if (!/^([1-9]|10|一|二|三|四|五|六|七|八|九|十)级?$/.test(level)) return void 0;
level = level.replace("级", "");
if (Number(level)) {
return Number(level);
} else {
return ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十"].indexOf(level) + 1;
}
}
__name(toDishLevel, "toDishLevel");
// src/script/monster/monsterClass.ts
var ElementType = /* @__PURE__ */ ((ElementType2) => {
ElementType2[ElementType2["无"] = 0] = "无";
ElementType2[ElementType2["风"] = 1] = "风";
ElementType2[ElementType2["地"] = 2] = "地";
ElementType2[ElementType2["水"] = 3] = "水";
ElementType2[ElementType2["火"] = 4] = "火";
ElementType2[ElementType2["光"] = 5] = "光";
ElementType2[ElementType2["暗"] = 6] = "暗";
return ElementType2;
})(ElementType || {});
var _Monster = class _Monster {
// 推荐系数
constructor(monsterData, star) {
this.type = monsterData.type;
this.name = monsterData.name;
this.level = monsterData.baseLevel;
this.baseExp = monsterData.baseExp;
this.map = monsterData.map;
this.element = monsterData.element;
const starLevel = [-10, 0, 10, 20, 40];
const starExp = [0.1, 1, 2, 5, 10];
if (star !== void 0) {
this.name = `${star}星${this.name}`;
this.star = star;
this.level = Math.max(1, this.level + starLevel[star]);
this.baseExp *= starExp[star];
}
if (monsterData.recommend) this.recommend = monsterData.recommend;
}
getPlayerExp(level) {
const playerExpRate = [11, 11, 11, 11, 11, 11, 10, 9, 7, 3, 1];
return this.baseExp * playerExpRate[Math.abs(level - this.level)] || 0;
}
cmdPlayerLevelUP(level) {
return `${this.name} 等级${this.level} 经验值${this.getPlayerExp(level)} ${this.map} ${ElementType[this.element]}属性`;
}
};
__name(_Monster, "Monster");
var Monster = _Monster;
// src/script/command/levelUpCommand.ts
async function command_levelUP(event, args) {
const checkResult = checkArgs2(args, event.config.maxLevel);
switch (checkResult.code) {
case 2001 /* 参数缺失 */:
ReplyMgr.Inst().reply(event, "升级命令_参数缺失");
return;
case 2002 /* 等级不正确 */:
ReplyMgr.Inst().reply(event, `升级命令_等级不正确`, { maxLevel: event.config.maxLevel.toString() });
return;
}
let title = "";
let result = "";
let tips = "";
const { level } = checkResult.result;
title = getUpgradeExp(level, event.config.maxLevel);
switch (true) {
case level < 38:
result = "\n亲亲,建议去尼塞尔山刷布兰达哦?";
break;
case level < 55:
result = "\n去上古女帝陵墓打机骨龙吧~";
break;
case level < event.config.maxLevel:
let fixBossList = [];
const fixBossDataList = await event.ctx.database.get("monster", { type: 2 /* 定点王 */, baseLevel: { $gte: level - 50, $lte: level + 20 } });
fixBossDataList.forEach((data) => {
for (let i = 0; i <= 4; i++) {
fixBossList.push(new Monster(data, i));
}
});
fixBossList = fixBossList.sort((a, b) => b.getPlayerExp(level) * (100 + b.recommend * 30) - a.getPlayerExp(level) * (100 + a.recommend * 30)).slice(0, event.config.levelUP_player_fixedBossReturn);
let wildBossList = [];
const wildBossDataList = await event.ctx.database.get("monster", { type: 1 /* 野王 */, baseLevel: { $gte: level - 10, $lte: level + 10 } });
wildBossDataList.forEach((data) => {
wildBossList.push(new Monster(data));
});
wildBossList = wildBossList.sort((a, b) => b.getPlayerExp(level) * (100 + b.recommend * 30) - a.getPlayerExp(level) * (100 + a.recommend * 30)).slice(0, event.config.levelUP_player_wildBossReturn);
const fixBossResult = fixBossList.map((monster, i) => {
return `${i + 1}.${monster.cmdPlayerLevelUP(level)}`;
});
result += `
定点王:
${fixBossResult.join("\n")}`;
const wildBossResult = wildBossList.map((monster, i) => {
return `${i + 1}.${monster.cmdPlayerLevelUP(level)}`;
});
result += `
野王:
${wildBossResult.join("\n")}`;
const rand = Math.floor(Math.random() * (fixBossList.length + wildBossList.length));
let suggestion = rand < fixBossList.length ? fixBossList[rand] : wildBossList[rand - fixBossList.length];
tips = `
去打${suggestion.name}怎么样?`;
break;
case level === event.config.maxLevel:
result = `
你已经升到满级啦!`;
break;
}
ReplyMgr.Inst().reply(event, "正常回复", { title, result, tips });
}
__name(command_levelUP, "command_levelUP");
function checkArgs2(args, maxLevel) {
let levelCN = args[0];
if (levelCN === void 0) return new Result(2001 /* 参数缺失 */);
if (/级$/.test(levelCN)) levelCN = levelCN.replace(/级/g, "");
const level = Number(levelCN);
if (isNaN(level) || level < 1 || level > maxLevel || Math.floor(level) !== level) return new Result(2002 /* 等级不正确 */);
return new Result(1001 /* 通过 */, { level });
}
__name(checkArgs2, "checkArgs");
function getUpgradeExp(level, maxLevel) {
const exp = Math.floor(level ** 4 / 40) + level * 2;
return level !== maxLevel ? `${level}级升级所需经验为${exp}` : "";
}
__name(getUpgradeExp, "getUpgradeExp");
// src/index.ts
var name = "toram";
var inject = ["database"];
var Config = import_koishi.Schema.intersect([
import_koishi.Schema.object({
allowLoadJson: import_koishi.Schema.boolean().description("是否允许载入json内容").default(false)
}).description("状态配置"),
import_koishi.Schema.object({
maxLevel: import_koishi.Schema.number().description("当前版本的最大等级").default(280)
}).description("游戏信息"),
import_koishi.Schema.object({
dishes_return: import_koishi.Schema.number().description("使用料理指令且不指定等级时最少返回的玩家昵称数量").min(1).step(1).default(15),
levelUP_player_recommend: import_koishi.Schema.number().description("使用升级指令时推荐系数的影响幅度").min(0).step(5).default(30),
levelUP_player_fixedBossReturn: import_koishi.Schema.number().description("使用升级指令时返回的定点王数量").min(1).step(1).default(6),
levelUP_player_wildBossReturn: import_koishi.Schema.number().description("使用升级指令时返回的野王数量").min(1).step(1).default(4)
}).description("指令管理")
]);
async function apply(ctx, config) {
const logger = ctx.logger("toram");
JsonMgr.Inst().setLogger(logger);
await JsonMgr.Inst().loadJson();
await DishMgr.Inst().setConfigs(ctx);
await PlayerMgr.Inst().setConfigs(ctx);
ReplyMgr.Inst().setReplys();
ctx.model.extend("monster", {
id: "integer",
// 唯一标识
type: "integer",
// 0:小怪,1:野王,2:定点王
name: "string",
// 名称
baseLevel: "integer",
// 等级
baseExp: "integer",
// 基础经验
map: "string",
// 所在地图
element: "integer",
// 属性
recommend: "integer"
// 推荐
}, {
primary: "id"
});
ctx.model.extend("player", {
id: "integer",
// 唯一标识
nickname: "string",
// 名称
dishes: "string",
// 料理JSON
path: "integer"
// 等级
}, {
primary: "id"
});
ctx.model.extend("dish", {
id: "integer",
// 唯一标识
player: "string",
type: "integer",
level: "integer"
}, {
primary: "id"
});
ctx.middleware(async (session, next) => {
logger.info(session);
const event = newEvent(ctx, session, config, logger);
ReplyMgr.Inst().reply(event, "被@");
return next();
});
ctx.command("料理 <料理种类> <料理等级>").action(async ({ session }, ...args) => {
const event = newEvent(ctx, session, config, logger);
await command_dishes(event, args);
});
ctx.command("升级 <等级数>").action(async ({ session }, ...args) => {
const event = newEvent(ctx, session, config, logger);
await command_levelUP(event, args);
});
ctx.command("loadJson").action(async ({ session }) => {
if (!config.allowLoadJson) {
session.send("不允许加载json内容");
return;
}
await ctx.database.remove("monster", { id: { $gt: 0 } });
const monsterList = JsonMgr.Inst().getJson("monster.json").map((monster) => {
delete monster._id;
return monster;
});
await ctx.database.upsert("monster", (row) => monsterList);
await ctx.database.remove("player", { id: { $gt: 0 } });
const playerList = JsonMgr.Inst().getJson("player.json").map((player) => {
return {
id: player.id,
nickname: player.name,
dishes: player.dishes,
path: player.path
};
});
await ctx.database.upsert("player", (row) => playerList);
await ctx.database.remove("dish", { id: { $gt: 0 } });
const dishList = [];
playerList.forEach((player) => {
const dishes = JSON.parse(player.dishes);
dishes.forEach((dish) => {
dishList.push({
id: dishList.length + 1,
player: player.nickname,
type: DishType[dish.type],
level: dish.level
});
});
});
await ctx.database.upsert("dish", (row) => dishList);
session.send("加载完成");
});
}
__name(apply, "apply");
function newEvent(ctx, session, config, logger) {
const event = {
ctx,
session,
config,
logger
};
return event;
}
__name(newEvent, "newEvent");
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Config,
apply,
inject,
name
});