283 lines
9.1 KiB
TypeScript
283 lines
9.1 KiB
TypeScript
|
import PlayerMgr from "../object/PlayerMgr";
|
|||
|
import GameUtil from "../core/GameUtil";
|
|||
|
import ActivityMgr from "./ActivityMgr";
|
|||
|
import ActivityDefine from "./ActivityDefine";
|
|||
|
import SKLogger from "../gear/SKLogger";
|
|||
|
|
|||
|
export default class ActivityBase {
|
|||
|
activity_id: number;
|
|||
|
name: string;
|
|||
|
open_notice: string;
|
|||
|
open_type: number;
|
|||
|
open_type_list: any[];
|
|||
|
open_time: number;
|
|||
|
close_time: number;
|
|||
|
activity_state: any;
|
|||
|
player_list: any;
|
|||
|
is_ready_notice: boolean;
|
|||
|
ready_open_time: number;
|
|||
|
ready_close_time: number;
|
|||
|
is_gm_open: boolean;
|
|||
|
|
|||
|
constructor() {
|
|||
|
this.activity_id = 0;
|
|||
|
this.name = '';
|
|||
|
this.open_notice = `${this.name} 已经开启,请大家踊跃参加!`;
|
|||
|
// 1 每天开放 2 每周周几 3 每月定时 4 固定时段每天开放 5 固定时段全天开放
|
|||
|
this.open_type = 0;
|
|||
|
// 存储根据类型的 时间节点
|
|||
|
// 1 无 2 存放(1~7) 3 存放日期 4 无
|
|||
|
this.open_type_list = [];
|
|||
|
|
|||
|
this.open_time = -1; // 开放的时间 0即 0点0分 900 即上午9点,1545即 15点45分
|
|||
|
this.close_time = -1; // 关闭时间同开服时间
|
|||
|
this.activity_state = ActivityDefine.activityState.Close;
|
|||
|
|
|||
|
this.player_list = {}; // onlyid -> player
|
|||
|
this.is_ready_notice = false; //是否准备公告
|
|||
|
this.ready_open_time = 0;
|
|||
|
this.ready_close_time = 0;
|
|||
|
this.is_gm_open = false;
|
|||
|
}
|
|||
|
|
|||
|
init() {
|
|||
|
this.open_time = this.open_type_list[0];
|
|||
|
this.close_time = this.open_type_list[1];
|
|||
|
|
|||
|
if (this.open_type != 4 && this.open_type != 5) {
|
|||
|
let curdate = new Date(GameUtil.gameTime);
|
|||
|
|
|||
|
if (this.open_time != -1) {
|
|||
|
let openhour = Math.floor(this.open_time / 100);
|
|||
|
let openminute = Math.floor(this.open_time % 100);
|
|||
|
let date = new Date(curdate.getFullYear(), curdate.getMonth(), curdate.getDate(), openhour, openminute, 0, 0);
|
|||
|
let readyopenm = date.getTime() - 5 * 60 * 1000;
|
|||
|
let readyopend = new Date(readyopenm);
|
|||
|
this.ready_open_time = readyopend.getHours() * 100 + readyopend.getMinutes();
|
|||
|
date = null;
|
|||
|
}
|
|||
|
if (this.close_time != -1) {
|
|||
|
let closehour = Math.floor(this.close_time / 100);
|
|||
|
let closeminute = Math.floor(this.close_time % 100);
|
|||
|
let date = new Date(curdate.getFullYear(), curdate.getMonth(), curdate.getDate(), closehour, closeminute, 0, 0);
|
|||
|
let readyclosem = date.getTime() - 5 * 60 * 1000;
|
|||
|
let readyclosed = new Date(readyclosem);
|
|||
|
this.ready_close_time = readyclosed.getHours() * 100 + readyclosed.getMinutes();
|
|||
|
date = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
readyOpen() {
|
|||
|
this.activity_state = ActivityDefine.activityState.ReadyOpen;
|
|||
|
if (this.is_ready_notice) {
|
|||
|
let times = 3;
|
|||
|
let broad = () => {
|
|||
|
times--;
|
|||
|
let brstr = `${this.name} 即将开启,请大家踊跃参加!`;
|
|||
|
PlayerMgr.shared.broadcast('s2c_notice', {
|
|||
|
strRichText: brstr
|
|||
|
});
|
|||
|
PlayerMgr.shared.broadcast('s2c_game_chat', {
|
|||
|
scale: 3,
|
|||
|
msg: brstr,
|
|||
|
name: '',
|
|||
|
resid: 0,
|
|||
|
teamid: 0,
|
|||
|
});
|
|||
|
if (times >= 0) {
|
|||
|
setTimeout(() => {
|
|||
|
broad();
|
|||
|
}, 10 * 1000);
|
|||
|
}
|
|||
|
}
|
|||
|
broad();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
open() {
|
|||
|
this.activity_state = ActivityDefine.activityState.Opening;
|
|||
|
if (this.is_ready_notice) {
|
|||
|
let brstr = this.open_notice;
|
|||
|
PlayerMgr.shared.broadcast('s2c_notice', {
|
|||
|
strRichText: brstr
|
|||
|
});
|
|||
|
PlayerMgr.shared.broadcast('s2c_game_chat', {
|
|||
|
scale: 3,
|
|||
|
msg: brstr,
|
|||
|
name: '',
|
|||
|
resid: 0,
|
|||
|
teamid: 0,
|
|||
|
});
|
|||
|
SKLogger.debug(`活动(${this.name})已经开启!`)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
gmState(state: any) {
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
readyClose() {
|
|||
|
this.activity_state = ActivityDefine.activityState.ReadyClose;
|
|||
|
if (this.is_ready_notice) {
|
|||
|
let brstr = `${this.name} 即将关闭,大家抓紧时间!`;
|
|||
|
PlayerMgr.shared.broadcast('s2c_notice', {
|
|||
|
strRichText: brstr
|
|||
|
});
|
|||
|
PlayerMgr.shared.broadcast('s2c_game_chat', {
|
|||
|
scale: 3,
|
|||
|
msg: brstr,
|
|||
|
name: '',
|
|||
|
resid: 0,
|
|||
|
teamid: 0,
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
close() {
|
|||
|
this.activity_state = ActivityDefine.activityState.Close;
|
|||
|
if (this.is_ready_notice) {
|
|||
|
let brstr = `本次 ${this.name} 已结束,请大家下次继续参加`;
|
|||
|
PlayerMgr.shared.broadcast('s2c_notice', {
|
|||
|
strRichText: brstr
|
|||
|
});
|
|||
|
PlayerMgr.shared.broadcast('s2c_game_chat', {
|
|||
|
scale: 3,
|
|||
|
msg: brstr,
|
|||
|
name: '',
|
|||
|
resid: 0,
|
|||
|
teamid: 0,
|
|||
|
});
|
|||
|
}
|
|||
|
SKLogger.debug(`活动[${this.name}]已经关闭!`)
|
|||
|
}
|
|||
|
|
|||
|
onNewDay() {
|
|||
|
}
|
|||
|
|
|||
|
onNewHour() {
|
|||
|
}
|
|||
|
|
|||
|
checkReadyOpen() {
|
|||
|
if (this.activity_state == ActivityDefine.activityState.ReadyOpen) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
let curDate = new Date(GameUtil.gameTime);
|
|||
|
if (this.open_type == 2) {
|
|||
|
let weekday = curDate.getDay() + 1;
|
|||
|
if (this.open_type_list.indexOf(weekday) == -1) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (this.open_type == 3) {
|
|||
|
let monthday = curDate.getDate();
|
|||
|
if (this.open_type_list.indexOf(monthday) == -1) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (this.open_type == 4 || this.open_type == 5) {
|
|||
|
let curyear = curDate.getHours();
|
|||
|
let curmoth = curDate.getMonth() + 1;
|
|||
|
let curday = curDate.getDate();
|
|||
|
let curtime = curyear * 1000 + curmoth * 100 + curday;
|
|||
|
|
|||
|
let activity_begin_time = this.open_type_list[0];
|
|||
|
let activity_end_time = this.open_type_list[1];
|
|||
|
if (curtime < activity_begin_time || curtime > activity_end_time) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
let curhour = curDate.getHours();
|
|||
|
let curminute = curDate.getMinutes();
|
|||
|
let curtt = curhour * 100 + curminute;
|
|||
|
|
|||
|
if (curtt >= this.ready_open_time && curtt < this.open_time) {
|
|||
|
this.readyOpen();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 以 千位数字 获取时间
|
|||
|
getActTime(offest = 0) {
|
|||
|
let curDate = new Date(GameUtil.gameTime + offest);
|
|||
|
let curhour = curDate.getHours();
|
|||
|
let curminute = curDate.getMinutes();
|
|||
|
let curtt = curhour * 100 + curminute;
|
|||
|
return curtt;
|
|||
|
}
|
|||
|
|
|||
|
checkOpen() {
|
|||
|
if (this.activity_state != ActivityDefine.activityState.ReadyOpen) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
let curtime = this.getActTime();
|
|||
|
if (curtime >= this.open_time && curtime < this.close_time) {
|
|||
|
this.open();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
checkReadyClose() {
|
|||
|
if (this.activity_state != ActivityDefine.activityState.Opening) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
let curtime = this.getActTime();
|
|||
|
if (curtime > this.ready_close_time && curtime < this.close_time) {
|
|||
|
this.readyClose();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
checkClose() {
|
|||
|
if (this.activity_state == ActivityDefine.activityState.close) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
let curtime = this.getActTime();
|
|||
|
if (curtime >= this.close_time) {
|
|||
|
this.close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
update(dt: number) {
|
|||
|
if (this.open_type == 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (this.open_type == 4 || this.open_type == 5) {
|
|||
|
let curDate = new Date(GameUtil.gameTime);
|
|||
|
|
|||
|
let curyear = curDate.getFullYear();
|
|||
|
let curmoth = curDate.getMonth() + 1;
|
|||
|
let curday = curDate.getDate();
|
|||
|
let curtime = curyear * 10000 + curmoth * 100 + curday;
|
|||
|
|
|||
|
let activity_begin_time = this.open_type_list[0];
|
|||
|
let activity_end_time = this.open_type_list[1];
|
|||
|
if (curtime >= activity_begin_time && curtime <= activity_end_time) {
|
|||
|
if (this.open_type == 5) {
|
|||
|
this.open();
|
|||
|
}
|
|||
|
} else {
|
|||
|
this.close();
|
|||
|
ActivityMgr.shared.delActivity(this.activity_id);
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (this.activity_state == ActivityDefine.activityState.Close) {
|
|||
|
this.checkReadyOpen();
|
|||
|
this.checkOpen();
|
|||
|
} else if (this.activity_state == ActivityDefine.activityState.ReadyOpen) {
|
|||
|
this.checkOpen();
|
|||
|
} else if (this.activity_state == ActivityDefine.activityState.Opening) {
|
|||
|
this.checkReadyClose();
|
|||
|
this.checkClose();
|
|||
|
} else if (this.activity_state == ActivityDefine.activityState.ReadyClose) {
|
|||
|
this.checkClose();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|