166 lines
5.6 KiB
TypeScript
166 lines
5.6 KiB
TypeScript
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<b.cdate?1:-1;
|
|
});
|
|
let frist = report.splice(0,10);
|
|
return frist;
|
|
}
|
|
} |