276 lines
10 KiB
TypeScript
276 lines
10 KiB
TypeScript
import DB from "../utils/DB";
|
||
import SKLogger from "../gear/SKLogger";
|
||
import * as schedule from "node-schedule";
|
||
import {EAttrCalType, MsgCode} from "../role/EEnum";
|
||
import PlayerMgr from "../object/PlayerMgr";
|
||
import SKDataUtil from "../gear/SKDataUtil";
|
||
import GoodsMgr from "../item/GoodsMgr";
|
||
import GameUtil from "../core/GameUtil";
|
||
import FivePhases from "../object/FivePhases";
|
||
|
||
|
||
export default class ChangeCard {
|
||
static shared = new ChangeCard();
|
||
cardlist: any[];
|
||
uselist: any[];
|
||
schedule: any;// 定时器
|
||
constructor() {
|
||
this.cardlist = [];
|
||
this.uselist = [];
|
||
}
|
||
|
||
init() {
|
||
this.readDB();
|
||
this.useList();
|
||
this.schedule = schedule.scheduleJob("0 0/1 * * * ? ", () => {
|
||
for (let i = 0; i < this.uselist.length; i++) {
|
||
if (this.uselist[i] == undefined) {
|
||
continue;
|
||
}
|
||
let endtime = new Date().getTime();
|
||
if (endtime > this.uselist[i].endtime) {//变身卡到期
|
||
this.clearCard(this.uselist[i].roleid, this.uselist[i].resid);
|
||
let sql = `DELETE FROM use_change_card WHERE roleid = '${this.uselist[i].roleid}';`;
|
||
DB.query(sql, (error: any, rows: any) => {
|
||
if (error) {
|
||
return;
|
||
}
|
||
})
|
||
let player = PlayerMgr.shared.getPlayerByRoleId(this.uselist[i].roleid);
|
||
if(player){
|
||
player.send('s2c_notice', {
|
||
strRichText: `变身时间到期,您的变身卡效果消失了`
|
||
});
|
||
}
|
||
delete this.uselist[i];
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
readDB() {
|
||
let sql = `SELECT * FROM qy_change_card`;
|
||
DB.query(sql, (error: any, rows: any) => {
|
||
for (let i = 0; i < rows.length; i++) {
|
||
this.cardlist.push({
|
||
cardid: rows[i].card_id, //变身卡id
|
||
resid: rows[i].resid, //外观id
|
||
cardname: rows[i].card_name, //变身卡名字
|
||
relive: rows[i].relive, //转生
|
||
level: rows[i].level, //等级
|
||
cardtype: rows[i].card_type, //变身卡类型 (1: 强法,2: 抗性,3: 物理)
|
||
cardstate: rows[i].card_state, //变身卡状态 (0: 不变,1: 变身)
|
||
fplevel: rows[i].five_phases_level, //五行等级
|
||
validtime: rows[i].valid_time, //有效时间
|
||
gain: rows[i].gain, //属性增益
|
||
fivephases: rows[i].five_phases, //五行
|
||
fpmarkup: rows[i].five_phases_markup, //五行加成
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
useList() {
|
||
let callback = (ret: any, rows: any) => {
|
||
if (ret == MsgCode.SUCCESS) {
|
||
for (let i = 0; i < rows.length; i++) {
|
||
this.uselist.push({
|
||
roleid: rows[i].roleid,
|
||
resid: rows[i].resid,
|
||
cardid: rows[i].card_id,
|
||
usetime: rows[i].usetime,
|
||
endtime: rows[i].endtime,
|
||
gain: rows[i].gain,
|
||
fivephases: rows[i].five_phases,
|
||
})
|
||
}
|
||
}
|
||
}
|
||
DB.selectUseCard(callback);
|
||
}
|
||
|
||
//查询使用的变身卡
|
||
selectUseCard(roleid: any) {
|
||
for (let i = 0; i < this.uselist.length; i++) {
|
||
if (this.uselist[i] == undefined) {
|
||
continue;
|
||
}
|
||
if(roleid == this.uselist[i].roleid){
|
||
let card = this.getCard(this.uselist[i].cardid);
|
||
return card;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
|
||
//变身卡详情页
|
||
detailPage(roleid: any) {
|
||
for (let i = 0; i < this.uselist.length; i++) {
|
||
if (this.uselist[i] == undefined) {
|
||
continue;
|
||
}
|
||
if(roleid == this.uselist[i].roleid){
|
||
let card = {
|
||
cardid: this.uselist[i].cardid,
|
||
endtime: this.uselist[i].endtime
|
||
};
|
||
return card;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/**
|
||
* 检测玩家是否使用过变身卡 如果使用过删除
|
||
* @param roleid
|
||
*/
|
||
selectUseList(roleid: any) {
|
||
for (let i = 0; i < this.uselist.length; i++) {
|
||
if (this.uselist[i] == undefined) {
|
||
continue;
|
||
}
|
||
if (roleid == this.uselist[i].roleid) {//替换变身卡
|
||
this.clearCard(this.uselist[i].roleid, this.uselist[i].resid);
|
||
delete this.uselist[i];
|
||
let sql = `DELETE FROM use_change_card WHERE roleid = '${roleid}';`;
|
||
DB.query(sql, (error: any, rows: any) => {
|
||
if (error) {
|
||
return;
|
||
}
|
||
})
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
getCardInfoByCardId(cardid: any) {
|
||
for (let key in this.cardlist) {
|
||
let card = this.cardlist[key];
|
||
if (card.cardid == cardid) {
|
||
return card;
|
||
}
|
||
}
|
||
}
|
||
|
||
// 获取变身卡数据
|
||
getCard(cardid: any) {
|
||
for (let key in this.cardlist) {
|
||
let card = this.cardlist[key];
|
||
if (card.cardid == cardid) {
|
||
return card;
|
||
}
|
||
}
|
||
}
|
||
|
||
//数据暂存
|
||
dataTS(player: any, card: any) {
|
||
let usetime = new Date().getTime();
|
||
let validtime = 120 * 60 * 1000;
|
||
let endtime = usetime + validtime;
|
||
this.uselist.push({
|
||
roleid: player.roleid,
|
||
resid: player.resid,
|
||
cardid: card.cardid,
|
||
usetime: usetime,
|
||
endtime: endtime,
|
||
gain: card.gain,
|
||
fivephases: card.fivephases,
|
||
})
|
||
let sql = `INSERT INTO use_change_card(roleid, resid, card_id, usetime, endtime, gain, five_phases) VALUES('${player.roleid}','${player.resid}','${card.cardid}','${usetime}','${endtime}','${card.gain}','${card.fivephases}');`;
|
||
DB.query(sql, (error: any, rows: any) => {
|
||
if (error) {
|
||
let info = DB.errorInfo(error);
|
||
SKLogger.warn(`数据:插入错误[${info}]`);
|
||
return;
|
||
}
|
||
if (rows.length == 0) {
|
||
return;
|
||
}
|
||
})
|
||
}
|
||
|
||
// 变身卡分解
|
||
cardResolve(player: any, data: any) {
|
||
let item = GoodsMgr.shared.getItemInfo(data.itemid);
|
||
if (item == null) {
|
||
return;
|
||
}
|
||
let n = player.getBagItemNum(data.itemid);
|
||
if (n >= data.count) {
|
||
let card = this.getCard(data.itemid);
|
||
//神兽卡
|
||
if (item.level == 1003) {
|
||
player.addItem(data.itemid, -data.count, false, `${card.name}分解`);
|
||
player.addItem(100315, data.count, false, `${card.name}分解`);
|
||
}
|
||
//特殊卡
|
||
if (item.level == 1002) {
|
||
player.addItem(data.itemid, -data.count, false, `${card.name}分解`);
|
||
player.addItem(100313, data.count, false, `${card.name}分解`);
|
||
}
|
||
//高级卡
|
||
if (item.level == 1001) {
|
||
player.addItem(data.itemid, -data.count, false, `${card.name}分解`);
|
||
player.addItem(100311, data.count, false, `${card.name}分解`);
|
||
}
|
||
}
|
||
}
|
||
|
||
//清除增益效果
|
||
clearCard(roleid: any, resid: any) {
|
||
let player = PlayerMgr.shared.getPlayerByRoleId(roleid);
|
||
if (player) {
|
||
player.calculateAttr()
|
||
let pdata = player.getData();
|
||
pdata.resid = player.resid;
|
||
pdata.changeid = 0;
|
||
player.send('s2c_player_data', pdata);
|
||
}
|
||
}
|
||
|
||
checkCard(roleid: number){
|
||
//检查数据库没有到期的变身卡
|
||
let player = PlayerMgr.shared.getPlayerByRoleId(roleid);
|
||
if (player){
|
||
for (let i = 0; i < this.uselist.length; i++) {
|
||
if (this.uselist[i] == undefined) {
|
||
continue;
|
||
}
|
||
if(roleid == this.uselist[i].roleid){
|
||
let card = this.getCard(this.uselist[i].cardid);
|
||
let gain = SKDataUtil.jsonBy(this.uselist[i].gain);
|
||
let fpmarkup = FivePhases.shared.getfpMarkup(player.roleid,card);
|
||
if(player){
|
||
player.calculateAttr();
|
||
for (let key in gain) {
|
||
let key1 = Number(key);
|
||
let value = 0;
|
||
if(key1 < 75 && key1 > 69){
|
||
value = gain[key];
|
||
}else{
|
||
value = Math.floor(gain[key] + (gain[key] * (fpmarkup / 100)));
|
||
}
|
||
let addattr = GameUtil.attrToBaseAttr[key1];
|
||
if (addattr != null) {
|
||
let target_attr = addattr.target;
|
||
if (addattr.cal == EAttrCalType.ADD_PERCENT) {
|
||
player.attr1[target_attr] = Math.floor((1 + value / 100) * player.attr1[target_attr]);
|
||
if(target_attr == 30 || target_attr == 32){
|
||
let attr = target_attr += 1;
|
||
player.attr1[attr] = Math.floor((1 + value / 100) * player.attr1[target_attr]);
|
||
}
|
||
}
|
||
} else {
|
||
player.attr1[key1] += value;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
let pdata = player.getData();
|
||
player.send('s2c_player_data', pdata);
|
||
}
|
||
}
|
||
} |