/** * 玩家邮件列表 */ import GameConf from "../../conf/GameConf"; import GameUtil from "../core/GameUtil"; import SKDataUtil from "../gear/SKDataUtil"; import SKLogger from "../gear/SKLogger"; import Player from "../object/Player"; import { EMailAction, EMailState, MsgCode } from "../role/EEnum"; import DB from "../utils/DB"; import MailData from "./MailData"; import MailMgr from "./MailMgr"; import * as schedule from "node-schedule"; import PaiHangMgr from "../core/PaiHangMgr"; export default class MailList { owner: Player; schedule: any; list: MailData[]; constructor(player: Player) { this.owner = player; this.list = []; this.schedule = schedule.scheduleJob("0 0 5 * * ? ", () => { let list: [] = PaiHangMgr.shared.getJingJiRank(); let firstList = list.splice(0,5);//前五名 let lastList = list; //除了前五名 }) } // 首次登录拉取系统邮件 setDB(rows: any) { if(!GameConf.mailEnabled){ return; } this.list = []; for (let row of rows) { let mail = MailMgr.shared.getMailBy(row.mail_id); if (mail) { mail.state = row.state; this.list.push(mail); } else { SKLogger.warn(`玩家邮件:玩家[${this.owner.roleid}:${this.owner.name}]拉取邮件[${row.mail_id}]为空!`); } } this.check(); } // 检查是否有新邮件 check() { if(!GameConf.mailEnabled){ return; } let last = MailMgr.shared.check(this.owner, this.list); // 通知玩家有新的邮件 if (last.length > 0) { for (let mail of last) { this.list.push(mail); } } // 降序 this.list.sort((a, b) => { let result = a.mail_id < b.mail_id ? 1 : -1; return result; }); } // 获取邮件列表 getMailList() { if(!GameConf.mailEnabled){ return; } this.saveCurveRoleAll(); let mailList: any[] = []; for (let mail of this.list) { if (mail.state == EMailState.REMOVE) { continue; } mailList.push(mail.toObj()); // 当前玩家邮件数量大于等于当前最大邮件容量,把领取过的邮件直接删除 if (this.list.length >= GameUtil.limitMail){ if (mail.state == EMailState.GET){ mail.state = EMailState.REMOVE; } } } let params = { list: mailList }; this.owner.send("s2c_mail_list", params); } // 获得指定的邮件 getMailBy(mailId: number): MailData { let result: MailData = null; for (let item of this.list) { if (item.mail_id == mailId) { result = item; break; } } return result; } // 运行动作 runAction(data: any) { // if (this.owner.relive < 1 ){ // this.owner.send("s2c_run_action",{state: MsgCode.FAILED}) // this.owner.send_notice(`一转后才可以操作邮件哦!`); // return; // } this.owner.send("s2c_run_action",{state: MsgCode.SUCCESS}) if(!GameConf.mailEnabled){ return; } if (data.action == EMailAction.GET_ALL) { this.getAllMailItem(); return; } if (data.action == EMailAction.REMOVE_ALL) { this.removeAllNoGet(); return; } let mail = this.getMailBy(data.mailId); if (mail == null) { this.owner.send('s2c_notice', { strRichText: `找不到邮件[${data.mailId}]!` }); return; } if (data.action == EMailAction.GET) { this.getMailItem(mail); return; } if (data.action == EMailAction.REMOVE) { mail.state = EMailState.REMOVE; this.getMailList(); return; } } // 领取所有邮件 private getAllMailItem() { if (SKDataUtil.isEmptyArray(this.list)) { this.owner.send('s2c_notice', { strRichText: `您已经全部领取过全部邮件!` }); return; } let change = false; for (let mail of this.list) { if (mail.state != EMailState.UN_GET) { continue; } if (SKDataUtil.isEmptyArray(mail.gets)) { continue; } if ((this.owner.getBagItemAllKindNum() + mail.gets.length) >= this.owner.bagKindNum) { this.owner.send('s2c_notice', { strRichText: `背包空间不足,无法领取邮件奖励!` }); break; } for (let get of mail.gets) { this.owner.addItem(get.itemId, get.itemCount, false, "领取邮件"); } mail.state = EMailState.GET; change = true; } if (change) { this.getMailList(); } else { this.owner.send('s2c_notice', { strRichText: `您没有需要领取的奖励邮件!` }); } } // 删除所有不需要领取的邮件 private removeAllNoGet(){ if (SKDataUtil.isEmptyArray(this.list)) { this.owner.send('s2c_notice', { strRichText: `没有可删除的邮件!` }); return; } let change = false; for (let mail of this.list) { if (mail.state == EMailState.UN_GET) { if(!SKDataUtil.isEmptyArray(mail.gets)){ continue; } } mail.state = EMailState.REMOVE; change = true; } if (change) { this.owner.send('s2c_notice', { strRichText: `已删除已领取或无奖励的全部邮件!` }); this.getMailList(); } else { this.owner.send('s2c_notice', { strRichText: `没有可删除的邮件!` }); } } // 领取指定邮件 private getMailItem(mail: MailData) { if (mail.state != EMailState.UN_GET) { this.owner.send('s2c_notice', { strRichText: `邮件已领取或已删除!` }); this.getMailList(); return; } if (SKDataUtil.isEmptyArray(mail.gets)) { this.owner.send('s2c_notice', { strRichText: `无邮件奖励领取!` }); return; } if ((this.owner.getBagItemAllKindNum() + mail.gets.length) >= this.owner.bagKindNum) { this.owner.send('s2c_notice', { strRichText: `背包空间不足,无法领取邮件奖励!` }); return; } for (let get of mail.gets) { this.owner.addItem(get.itemId, get.itemCount, false, "领取邮件"); } mail.state = EMailState.GET; this.getMailList(); return; } // 存档 saveAll(callback: (code: MsgCode, msg: string) => void) { if (!GameConf.mailEnabled) { callback(MsgCode.SUCCESS, `存档:玩家[${this.owner.roleid}:${this.owner.name}]邮件关闭无需存档`); return; } if (this.list.length < 1) { callback(MsgCode.SUCCESS, `存档:玩家[${this.owner.roleid}:${this.owner.name}]邮件为空无需存档`); return; } DB.saveRoleMail(this.owner.roleid, this.list, (code: MsgCode, msg: string) => { if (code != MsgCode.SUCCESS) { callback(MsgCode.SUCCESS, `存档:玩家[${this.owner.roleid}:${this.owner.name}]邮件存档失败[${msg}]!`); return; } callback(MsgCode.SUCCESS, `存档:玩家[${this.owner.roleid}:${this.owner.name}]邮件存档成功!`); }); } saveCurveRoleAll() { if (!GameConf.mailEnabled) { return; } if (this.list.length < 1) { return; } DB.saveRoleMail(this.owner.roleid, this.list, (code: MsgCode, msg: string) => { if (code != MsgCode.SUCCESS) { console.log(`领取邮件存档:玩家[${this.owner.roleid}:${this.owner.name}]邮件存档失败[${msg}]!`) return; } return; }); } }