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

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