xy-server/game/core/Exchange.ts
2025-04-23 09:34:08 +08:00

99 lines
3.6 KiB
TypeScript

import DB from "../utils/DB";
import SKLogger from "../gear/SKLogger";
import {MsgCode} from "../role/EEnum";
import ItemUtil from "../core/ItemUtil";
import SKDateUtil from "../gear/SKDateUtil";
export default class Exchange {
roleId: number;
list: string[];
convert: any[];
constructor(roleId: number) {
this.roleId = roleId;
this.convert = [];
}
readDB() {
DB.getExchange(this.roleId, (list) => {
this.list = list;
})
}
// 是否已兑换
hasCode(msg: string): boolean {
for (let code of this.list) {
if (msg == code) {
return true;
}
}
return false;
}
// 检查是否有兑换- 需要优化
checkCode(msg: string, player: any): any {
if (!msg || msg.length < 1) {
return null;
}
if (this.hasCode(msg)) {
return null;
}
player.exchange.list.push(msg);
let callback = (ret: any, rows: any) => {
if (ret == MsgCode.SUCCESS) {
for (let i = 0; i < rows.length; i++) {
this.convert.push({
code: rows[i].code,
reward: rows[i].reward,
start: rows[i].start,
end: rows[i].end
})
}
let data = this.convert
for (let key in data) {
let item = data[key];
if (item.code == msg) {
if (item) {
let params = item.reward.split(",");
let hasReward = false;
for (let temp of params) {
let itemParams = temp.split(":");
let itemId = itemParams[0];
let itemData = ItemUtil.getItemData(itemId);
if (!itemData) {
continue;
}
let start = item.start ? item.start : "";
let end = item.end ? item.end : "";
let atRange = SKDateUtil.atRange(start, end);
if (!atRange) {
player.send_notice(`您的兑换码[${msg}]不在有效期内!`);
return;
}
hasReward = true;
let itemCount = itemParams[1];
player.addItem(itemId, itemCount, true, `您通过兑换码[${msg}]获得${itemData.name}${itemCount}`);
}
if (hasReward) {
DB.saveExchange(player.roleid, msg, (code, msg) => {
if (code == 0) {
SKLogger.debug(msg);
} else {
SKLogger.warn(msg);
}
});
}
player.send('s2c_convert', {
reward: item.reward
});
} else {
player.send_notice(`激活失败,此码错误或已过期!`);
}
}
}
}
callback = null;
}
DB.checkCod(msg, callback);
}
}