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); } }