Files
bcm-tool/dist/bcm_tool.js
T

269 lines
9.7 KiB
JavaScript
Raw Normal View History

2026-01-20 10:21:38 +08:00
"use strict";
2026-01-20 18:38:37 +08:00
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
2026-01-20 10:28:10 +08:00
class BcmTool {
2026-01-20 16:22:31 +08:00
constructor() {
2026-01-20 18:38:37 +08:00
this.attributes = new Map([
2026-03-17 17:33:02 +08:00
['*后仰倾向', 28],
['*造防守犯规', 37],
['*造进攻犯规', 33],
['*假动作', 40],
['*进攻犯规', 24],
['*防守犯规', 25],
['*进攻IQ', 17],
2026-03-20 19:16:46 +08:00
['*防守IQ', 18],
['*反应时间', 30],
2026-01-20 10:28:10 +08:00
['速度', 1],
['力量', 2],
['内攻', 3],
['中投', 4],
['三分', 5],
['三分急停跳投倾向', 6],
['内线防守能力', 7],
['外线防守能力', 8],
['突破能力', 9],
['上篮能力', 10],
['控球能力', 11],
['传球能力', 12],
['传球视野', 13],
['干扰投篮', 14],
['篮板能力', 15],
['*出手时间', 16],
['体能', 19],
['卡位能力', 20],
['罚球能力', 21],
['抢断能力', 22],
['盖帽能力', 23],
['扣篮能力', 26],
['勾手倾向', 27],
['打板倾向', 29],
['拉开空间', 31],
['补防、协防', 32],
['快下', 34],
['无球跑动', 35],
['挡拆', 36],
['无球掩护', 38],
['进攻篮板', 39],
['攻转守', 41],
['进攻技能', 44],
['防守技能', 48],
['身体素质', 50],
2026-01-20 18:38:37 +08:00
]);
2026-03-13 18:19:12 +08:00
this.mgrPlayers = g_game.mgr.mgr_team_player_team_info;
2026-01-20 18:38:37 +08:00
this.mgrMarket = g_game.mgr.mgr_market;
}
ExportPlayerInfo(playersToQuery) {
const lstAttributes = [...this.attributes];
const form = new Form();
2026-03-13 18:23:24 +08:00
form.SetCell(0, 0, "姓名");
2026-03-13 18:19:12 +08:00
form.SetCell(0, 1, "球队");
2026-03-20 19:16:46 +08:00
form.SetCell(0, 2, "年龄");
2026-01-20 18:38:37 +08:00
for (let i = 0; i != lstAttributes.length; ++i) {
2026-03-20 19:16:46 +08:00
form.SetCell(0, i + 3, lstAttributes[i][0]);
2026-01-20 16:56:27 +08:00
}
for (let i = 0; i != playersToQuery.length; ++i) {
const playerId = playersToQuery[i];
2026-01-20 18:38:37 +08:00
if (!this.CheckInfo(playerId)) {
2026-01-20 10:28:10 +08:00
console.log('找不到id', playerId);
continue;
}
2026-03-13 18:19:12 +08:00
form.SetCell(i + 1, 0, this.QueryName(playerId));
form.SetCell(i + 1, 1, this.QueryOwner(playerId));
2026-03-20 19:16:46 +08:00
form.SetCell(i + 1, 2, this.QueryAge(playerId).toString());
2026-01-20 18:38:37 +08:00
for (let j = 0; j != lstAttributes.length; ++j) {
const record = this.QueryInfo(playerId, lstAttributes[j][1]);
2026-03-20 19:16:46 +08:00
form.SetCell(i + 1, j + 3, record.toString());
2026-01-20 10:28:10 +08:00
}
2026-01-20 10:21:38 +08:00
}
2026-01-20 16:56:27 +08:00
console.log(form);
g_game.tools.CopyStrToClipboard(form.ToString());
2026-01-20 10:21:38 +08:00
}
2026-01-20 19:41:40 +08:00
BulkSearchMarket(searchStr_1) {
return __awaiter(this, arguments, void 0, function* (searchStr, maxIterate = 100) {
searchStr = searchStr.replace(/ /g, '');
const strs = searchStr.split('&&');
const operators = ['>', '<', '=='];
const handlers = [
(id, attri, value) => {
return this.QueryInfo(id, attri) > value;
},
(id, attri, value) => {
return this.QueryInfo(id, attri) < value;
},
(id, attri, value) => {
return Math.floor(this.QueryInfo(id, attri)) == value;
},
(id, attri, value) => {
return this.QueryInfo(id, attri) >= value;
},
(id, attri, value) => {
return this.QueryInfo(id, attri) <= value;
},
];
const conditions = [];
const requireAttributes = [];
const requireSearch = [];
const requireValues = [];
for (let i = 0; i != strs.length; ++i) {
const str = strs[i];
const operator = operators.find(e => str.search(e) != -1);
if (operator == null) {
console.log('条件解析失败', str);
continue;
}
const handler = handlers[operators.indexOf(operator)];
const requires = str.split(operator);
const attribute = this.attributes.get(requires[0]);
const value = Number(requires[1]);
if (attribute == null || handler == null) {
console.log('条件解析失败', str);
continue;
}
conditions.push(handler);
requireAttributes.push(attribute);
requireValues.push(value);
requireSearch.push(requires[0]);
2026-01-20 18:38:37 +08:00
}
var results = [];
const ids = Object.keys(this.mgrMarket._map_player_infos);
for (const id of ids) {
if (maxIterate < 0) {
break;
}
2026-01-22 11:23:57 +08:00
const info = this.mgrMarket.GetSellPlayer(id);
2026-01-20 19:41:40 +08:00
if (!this.CheckInfo(info.playerId)) {
2026-03-13 18:19:12 +08:00
yield this.OpenPlayerInTransaction(info.teamId, info.playerId);
2026-01-20 19:41:40 +08:00
yield this.Wait(100);
maxIterate -= 1;
2026-01-22 11:23:57 +08:00
if (!this.CheckInfo(info.playerId)) {
continue;
}
2026-01-20 19:41:40 +08:00
}
2026-01-20 18:38:37 +08:00
if (conditions.every((e, i) => e(info.playerId, requireAttributes[i], requireValues[i]))) {
results.push(info);
}
}
2026-03-13 18:19:12 +08:00
// const displays = new Set<number>(requireAttributes);
// for (const result of results)
// {
// const displayStr = [...displays].map(e =>
// {
// const idx = requireAttributes.indexOf(e);
// const search = requireSearch[idx];
// const value = this.QueryInfo(result.playerId, requireAttributes[idx]);
// return `${search}:${value}`;
// });
// console.log(`${result.playerName}(${this.QueryOwner(result.playerId)})`, ...displayStr);
// }
this.ExportPlayerInfo(results.map(e => e.playerId));
2026-01-20 19:41:40 +08:00
});
2026-01-20 18:38:37 +08:00
}
2026-03-13 18:19:12 +08:00
OpenPlayerInTransaction(teamId, playerId) {
2026-01-20 18:38:37 +08:00
return new Promise(resolve => {
2026-03-13 18:19:12 +08:00
this.mgrPlayers.OpenPlayerDetailInTransaction(teamId, playerId, e => {
2026-01-20 18:38:37 +08:00
resolve();
return true;
}, e => {
resolve();
});
});
}
CheckInfo(playerId) {
2026-03-13 18:19:12 +08:00
const data = this.mgrPlayers.GetPlayerData(playerId);
2026-01-20 10:28:10 +08:00
return data != null;
}
2026-01-20 18:38:37 +08:00
QueryName(playerId) {
2026-03-13 18:19:12 +08:00
const data = this.mgrPlayers.GetPlayerData(playerId);
2026-01-22 11:23:57 +08:00
return data === null || data === void 0 ? void 0 : data.playerName;
2026-01-20 10:28:10 +08:00
}
2026-01-20 18:38:37 +08:00
QueryInfo(playerId, attri) {
2026-03-13 18:19:12 +08:00
const data = this.mgrPlayers.GetPlayerData(playerId);
return data === null || data === void 0 ? void 0 : data.GetSingleAttribute(attri, true);
2026-01-22 11:23:57 +08:00
}
2026-03-13 18:19:12 +08:00
QueryOwner(playerId) {
const data = this.mgrPlayers.GetPlayerData(playerId);
2026-01-22 11:23:57 +08:00
return data === null || data === void 0 ? void 0 : data.teamName;
2026-01-20 10:28:10 +08:00
}
2026-03-20 19:16:46 +08:00
QueryAge(playerId) {
const data = this.mgrPlayers.GetPlayerData(playerId);
return data === null || data === void 0 ? void 0 : data.playerAge;
}
2026-01-20 18:38:37 +08:00
GetPlayerIds() {
2026-03-13 18:19:12 +08:00
return Object.keys(this.mgrPlayers._map_player_detail);
2026-01-20 16:29:43 +08:00
}
2026-01-20 18:38:37 +08:00
ListPlayers() {
2026-03-13 18:19:12 +08:00
const ids = Object.keys(this.mgrPlayers._map_player_detail);
2026-01-20 11:43:33 +08:00
for (const id of ids) {
2026-01-20 18:38:37 +08:00
console.log(this.QueryName(id), id);
2026-01-20 11:43:33 +08:00
}
}
2026-01-20 18:38:37 +08:00
ListMarketPlayers() {
this.mgrMarket.SendSynOpenMarketInfoByFilter(() => {
console.log(this.mgrMarket._map_player_infos);
});
}
2026-01-20 19:41:40 +08:00
Wait(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, time);
});
}
2026-01-20 10:21:38 +08:00
}
2026-01-20 16:24:17 +08:00
class Logger {
constructor() {
this.msgs = '';
}
Info(...msgs) {
for (const msg of msgs) {
this.msgs += String(msg);
}
2026-01-20 16:56:27 +08:00
}
NextLine() {
2026-01-20 16:24:17 +08:00
this.msgs += '\n';
}
2026-01-20 16:56:27 +08:00
GetContent() {
2026-01-20 16:24:17 +08:00
return this.msgs;
}
Clear() {
this.msgs = '';
}
}
2026-01-20 16:56:27 +08:00
class Form {
constructor() {
this.records = [];
}
SetCell(col, row, data) {
if (this.records[col] == null) {
this.records[col] = [];
}
this.records[col][row] = data;
}
ToString() {
var _a;
2026-01-20 18:38:37 +08:00
const logger = new Logger();
2026-01-20 16:56:27 +08:00
for (let col = 0; col != this.records.length; ++col) {
for (let row = 0; row != this.records[col].length; ++row) {
logger.Info((_a = this.records[col][row]) !== null && _a !== void 0 ? _a : '');
if (row < this.records[col].length - 1) {
logger.Info(',');
}
}
if (col < this.records.length - 1) {
logger.NextLine();
}
}
return logger.GetContent();
}
}
2026-01-20 10:28:10 +08:00
(() => {
g_game.bcm_tool = new BcmTool();
})();