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