market search
This commit is contained in:
Vendored
+121
-20
@@ -1,10 +1,17 @@
|
||||
"use strict";
|
||||
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());
|
||||
});
|
||||
};
|
||||
class BcmTool {
|
||||
constructor() {
|
||||
this.mgrTeamInfo = g_game.mgr.mgr_team_player_team_info;
|
||||
}
|
||||
queryPlayerInfo(playersToQuery) {
|
||||
const attributes = [
|
||||
this.attributes = new Map([
|
||||
['年龄', -100],
|
||||
['速度', 1],
|
||||
['力量', 2],
|
||||
['内攻', 3],
|
||||
@@ -49,47 +56,141 @@ class BcmTool {
|
||||
['进攻技能', 44],
|
||||
['防守技能', 48],
|
||||
['身体素质', 50],
|
||||
];
|
||||
var form = new Form();
|
||||
for (let i = 0; i != attributes.length; ++i) {
|
||||
form.SetCell(i + 1, 0, attributes[i][0]);
|
||||
]);
|
||||
this.mgrTeamInfo = g_game.mgr.mgr_team_player_team_info;
|
||||
this.mgrMarket = g_game.mgr.mgr_market;
|
||||
}
|
||||
ExportPlayerInfo(playersToQuery) {
|
||||
const lstAttributes = [...this.attributes];
|
||||
const form = new Form();
|
||||
for (let i = 0; i != lstAttributes.length; ++i) {
|
||||
form.SetCell(i + 1, 0, lstAttributes[i][0]);
|
||||
}
|
||||
for (let i = 0; i != playersToQuery.length; ++i) {
|
||||
const playerId = playersToQuery[i];
|
||||
if (!this.checkInfo(playerId)) {
|
||||
if (!this.CheckInfo(playerId)) {
|
||||
console.log('找不到id', playerId);
|
||||
continue;
|
||||
}
|
||||
form.SetCell(0, i + 1, this.queryName(playerId));
|
||||
for (let j = 0; j != attributes.length; ++j) {
|
||||
const record = this.queryInfo(playerId, attributes[j][1]);
|
||||
form.SetCell(0, i + 1, this.QueryName(playerId));
|
||||
for (let j = 0; j != lstAttributes.length; ++j) {
|
||||
const record = this.QueryInfo(playerId, lstAttributes[j][1]);
|
||||
form.SetCell(j + 1, i + 1, record.toString());
|
||||
}
|
||||
}
|
||||
console.log(form);
|
||||
g_game.tools.CopyStrToClipboard(form.ToString());
|
||||
}
|
||||
checkInfo(playerId) {
|
||||
BulkSearchMarket(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]);
|
||||
}
|
||||
this.mgrMarket.SendSynOpenMarketInfoByFilter(() => __awaiter(this, void 0, void 0, function* () {
|
||||
var results = [];
|
||||
const ids = Object.keys(this.mgrMarket._map_player_infos);
|
||||
for (const id of ids) {
|
||||
if (maxIterate < 0) {
|
||||
break;
|
||||
}
|
||||
const info = this.mgrMarket._map_player_infos[id];
|
||||
yield this.RefreshPlayerInTransaction(info.teamId, info.playerId);
|
||||
if (conditions.every((e, i) => e(info.playerId, requireAttributes[i], requireValues[i]))) {
|
||||
results.push(info);
|
||||
}
|
||||
maxIterate -= 1;
|
||||
}
|
||||
const displays = new Set(requireAttributes);
|
||||
for (const result of results) {
|
||||
const displayStr = [...displays].map(e => {
|
||||
const idx = requireAttributes.indexOf(e);
|
||||
const search = requireSearch[idx];
|
||||
const value = result.GetSingleAttribute(e, true);
|
||||
return `${search}:${value}`;
|
||||
});
|
||||
console.log(result.playerName, ...displayStr);
|
||||
}
|
||||
}));
|
||||
}
|
||||
RefreshPlayerInTransaction(teamId, playerId) {
|
||||
return new Promise(resolve => {
|
||||
this.mgrTeamInfo.OpenPlayerDetailInTransaction(teamId, playerId, e => {
|
||||
resolve();
|
||||
return true;
|
||||
}, e => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
CheckInfo(playerId) {
|
||||
const data = this.mgrTeamInfo.GetPlayerData(playerId);
|
||||
return data != null;
|
||||
}
|
||||
queryName(playerId) {
|
||||
QueryName(playerId) {
|
||||
const data = this.mgrTeamInfo.GetPlayerData(playerId);
|
||||
return data.playerName;
|
||||
}
|
||||
queryInfo(playerId, attri) {
|
||||
QueryInfo(playerId, attri) {
|
||||
const data = this.mgrTeamInfo.GetPlayerData(playerId);
|
||||
return data.GetSingleAttribute(attri).toFixed(2);
|
||||
if (attri == -100) {
|
||||
return data.playerAge;
|
||||
}
|
||||
return data.GetSingleAttribute(attri);
|
||||
}
|
||||
getPlayerIds() {
|
||||
GetPlayerIds() {
|
||||
return Object.keys(this.mgrTeamInfo._map_player_detail);
|
||||
}
|
||||
listPlayers() {
|
||||
ListPlayers() {
|
||||
const ids = Object.keys(this.mgrTeamInfo._map_player_detail);
|
||||
for (const id of ids) {
|
||||
console.log(this.queryName(id), id);
|
||||
console.log(this.QueryName(id), id);
|
||||
}
|
||||
}
|
||||
ListMarketPlayers() {
|
||||
this.mgrMarket.SendSynOpenMarketInfoByFilter(() => {
|
||||
console.log(this.mgrMarket._map_player_infos);
|
||||
});
|
||||
}
|
||||
}
|
||||
class Logger {
|
||||
constructor() {
|
||||
@@ -122,7 +223,7 @@ class Form {
|
||||
}
|
||||
ToString() {
|
||||
var _a;
|
||||
var logger = new Logger();
|
||||
const logger = new Logger();
|
||||
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 : '');
|
||||
|
||||
Reference in New Issue
Block a user