import PlayerMgr from "../object/PlayerMgr"; import PaiHangMgr from "../core/PaiHangMgr"; import {BattleType, EEventType, ERaceType, MsgCode} from "../role/EEnum"; import DB from "../utils/DB"; import * as schedule from "node-schedule"; import SKLogger from "../gear/SKLogger"; import Player from "../object/Player"; export default class JingJiChang{ static shared=new JingJiChang(); schedule: any;// 定时器 reportlist:any[]; constructor () { this.reportlist = []; } init(){ this.schedule = schedule.scheduleJob("59 59 23 6 * ? ", () => { let sql = `DELETE FROM qy_report;`; DB.query(sql, (error: any, rows: any) => { if (error) { return; } }) this.reportlist = []; }) } report(){ let callback = (ret: any, rows: any) => { if (ret == MsgCode.SUCCESS) { for (let i = 0; i < rows.length; i++) { this.reportlist.push({ sroleid: rows[i].sroleid, eresid: rows[i].eresid, eroleid: rows[i].eroleid, erolename: rows[i].erolename, iswin: rows[i].iswin, ranking: rows[i].ranking, cdate: rows[i].cdate }) } } } DB.selectReport(callback); } // 开始战斗 battleStart(roleid: any, troleid: any) { let brole = PlayerMgr.shared.getPlayerByRoleId(roleid); let trole = PlayerMgr.shared.getPlayerByRoleId(troleid); let obj = 0; if (trole == null){ DB.loginByRoleid(troleid, (code: any, info: any) => { let player = new Player(); player.setDB(info); PlayerMgr.shared.addPlayer(player); obj = player.onlyid; let tbro = PlayerMgr.shared.getPlayerByOnlyId(obj); if (brole && tbro && brole.arena.count >0) { brole.playerBattle(tbro.onlyid, BattleType.AREAN); } }); } if (brole && trole && brole.arena.count >0) { brole.playerBattle(trole.onlyid, BattleType.AREAN); } } //获取战斗信息 JingJiInfo(sroleid: any, tonlyid: any, iswin: any){ let ranking = 0; let sranking = 0; let tranking = 0; let trole = null; let tplayer = PlayerMgr.shared.getPlayerByOnlyId(tonlyid); let srole = PaiHangMgr.shared.getJingjiRank(sroleid); if(tplayer){ trole = PaiHangMgr.shared.getJingjiRank(tplayer.roleid); } if(srole){ sranking = PaiHangMgr.shared.getJingjiRank(sroleid).ranking; } if(trole){ tranking = PaiHangMgr.shared.getJingjiRank(tplayer.roleid).ranking; } if(iswin == 1 && tranking < sranking){ ranking = sranking - tranking//排名变化 } let sql = `INSERT INTO qy_report(sroleid, eresid, eroleid, erolename, iswin, ranking, cdate) VALUES('${sroleid}','${tplayer.resid}','${tplayer.roleid}','${tplayer.name}','${iswin}','${ranking}',NOW());`; DB.query(sql,(error: any, rows: any) => { if (error) { let info = DB.errorInfo(error); SKLogger.warn(`战报:插入错误[${info}]`); return; } if (rows.length == 0) { return; } }) } //战斗结束 battleEnd(roleid: any, iswin: any, tonlyid:any, gotReward = true){ let brole = PlayerMgr.shared.getPlayerByRoleId(roleid); brole.arena.count-=1;//次数-1 let taskState: any = {nKind:2,vecEventState:[],nTaskGrop:16} brole.getTaskMgr().onDeleteTask(taskState,0,true); brole.getTaskMgr().AddActive(16, 2); if(gotReward){ this.sendReward(brole,iswin,tonlyid) } } //发送奖励 sendReward(brole: any, iswin: any, tonlyid:any){ if(brole){ let exp = brole.level * 1255; let pexp = Math.floor(exp * 1.5); let jpoint = iswin == 1 ? 10 : 0; let jtime = iswin == 0 ? 4 : 0; brole.addJingjiScore(jpoint, jtime); brole.addExp(exp); brole.curPet && (brole.curPet.addExp(pexp)); brole.send('s2c_jingji_battleres', { iswin: iswin, // 1 胜利 0 失败 exp: exp, petexp: pexp, jpoint: jpoint, jtime: jtime, }); if(iswin == 1){ let trole = PlayerMgr.shared.getPlayerByOnlyId(tonlyid); PaiHangMgr.shared.JingJiRankUpdate(brole.roleid, trole.roleid); } } } //战报 getReportByRoleid(roleid: any){ this.report(); let report = []; for(let i = 0; i < this.reportlist.length; i++){ let items = this.reportlist[i]; if(items.sroleid == roleid || items.eroleid == roleid){ //获取跟玩家有关系的战斗信息 report.push({ sroleid : items.sroleid, eresid : items.eresid, eroleid : items.eroleid, erolename : items.erolename, iswin : items.iswin, ranking : items.ranking, cdate : items.cdate, }) } } report.sort((a, b) => { return a.cdate