军团活动:修复粮草先行
This commit is contained in:
@@ -111,8 +111,15 @@ export class CityActivityHandler {
|
|||||||
//TODO 权限校验&时间校验
|
//TODO 权限校验&时间校验
|
||||||
|
|
||||||
let { cityId } = msg;
|
let { cityId } = msg;
|
||||||
|
let dicCity = gameData.cityActivity.get(cityId);
|
||||||
|
if(dicCity.preCity.length > 0) return resResult(STATUS.CAN_NOT_DECLARE);
|
||||||
|
|
||||||
let checkResult = await GuildActivityCityModel.checkDeclartion(serverId, guildCode);
|
let checkResult = await GuildActivityCityModel.checkDeclartion(serverId, guildCode);
|
||||||
if(!!checkResult) return resResult(STATUS.HAS_DECLARED);
|
if(!!checkResult) return resResult(STATUS.HAS_DECLARED);
|
||||||
|
let curCity = await GuildActivityCityModel.getCity(serverId, cityId);
|
||||||
|
if(curCity && curCity.guardGuildCode) {
|
||||||
|
return resResult(STATUS.CITY_IS_GUARD);
|
||||||
|
}
|
||||||
|
|
||||||
let rec = await GuildActivityCityModel.declare(serverId, cityId, guildCode);
|
let rec = await GuildActivityCityModel.declare(serverId, cityId, guildCode);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Application, ChannelService, BackendSession } from "pinus";
|
import { Application, ChannelService, BackendSession } from "pinus";
|
||||||
import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY } from "../../../consts";
|
import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY } from "../../../consts";
|
||||||
import { resResult } from "../../../pubUtils/util";
|
import { resResult } from "../../../pubUtils/util";
|
||||||
import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend } from "../../../services/guildActivityService";
|
import { getGuildActivityStatus, getRaceActivityObj, getRaceActivityRank, getWoodenHorseList, calWoodenHorseAndSend, raceActivitySettleReward } from "../../../services/guildActivityService";
|
||||||
import { UserGuildModel } from "../../../db/UserGuild";
|
import { UserGuildModel } from "../../../db/UserGuild";
|
||||||
import { GuildActivityRecordModel } from "../../../db/GuildActivityRec";
|
import { GuildActivityRecordModel } from "../../../db/GuildActivityRec";
|
||||||
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||||
@@ -127,12 +127,15 @@ export class RaceActivityHandler {
|
|||||||
// 使用道具
|
// 使用道具
|
||||||
async useItem(msg: { id: number, count: number, toGuild: string }, session: BackendSession) {
|
async useItem(msg: { id: number, count: number, toGuild: string }, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let roleName = session.get('roleName');
|
let serverId = session.get('serverId');
|
||||||
let guildCode = session.get('guildCode');
|
let guildCode = session.get('guildCode');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
|
|
||||||
let {id, count, toGuild} = msg;
|
let {id, count, toGuild} = msg;
|
||||||
let obj = getRaceActivityObj();
|
let obj = getRaceActivityObj();
|
||||||
|
let woodenHorse = obj.getWoodenHorse(toGuild, serverId);
|
||||||
|
if(!woodenHorse) return resResult(STATUS.WRONG_PARMS);
|
||||||
|
|
||||||
let event = await obj.useItem(roleId, sid, guildCode, toGuild, id, count);
|
let event = await obj.useItem(roleId, sid, guildCode, toGuild, id, count);
|
||||||
if(!event) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
if(!event) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
|
||||||
@@ -174,7 +177,12 @@ export class RaceActivityHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async test(msg: { serverId: number }, session: BackendSession) {
|
async test(msg: { serverId: number }, session: BackendSession) {
|
||||||
let {serverId} = msg;
|
let guildCode = session.get('guildCode');
|
||||||
await calWoodenHorseAndSend(serverId);
|
let serverId = session.get('serverId');
|
||||||
|
let obj = getRaceActivityObj();
|
||||||
|
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
|
||||||
|
if(woodenHorse) {
|
||||||
|
await raceActivitySettleReward(guildCode, woodenHorse)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ import { Application, ChannelService } from 'pinus';
|
|||||||
import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg } from '../../../services/guildActivityService';
|
import { sendAllGuildRanks, sendGuildActEndMsg, calWoodenHorseAndSend, sendRaceStartMsg } from '../../../services/guildActivityService';
|
||||||
import { gameData } from '../../../pubUtils/data';
|
import { gameData } from '../../../pubUtils/data';
|
||||||
import { setWeek } from '../../../pubUtils/timeUtil';
|
import { setWeek } from '../../../pubUtils/timeUtil';
|
||||||
|
import { getAllServers } from '../../../services/redisService';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new GuildActivityRemote(app);
|
return new GuildActivityRemote(app);
|
||||||
@@ -55,10 +56,12 @@ export class GuildActivityRemote {
|
|||||||
let now = new Date();
|
let now = new Date();
|
||||||
cur.startMinute = now.getMinutes();
|
cur.startMinute = now.getMinutes();
|
||||||
cur.startTime = now.getHours();
|
cur.startTime = now.getHours();
|
||||||
|
cur.startSeconds = now.getSeconds();
|
||||||
} else {
|
} else {
|
||||||
let now = new Date(Date.now() - cur.duringTime * 1000);
|
let now = new Date(Date.now() - cur.duringTime * 1000);
|
||||||
cur.startMinute = now.getMinutes();
|
cur.startMinute = now.getMinutes();
|
||||||
cur.startTime = now.getHours();
|
cur.startTime = now.getHours();
|
||||||
|
cur.startSeconds = now.getSeconds();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ export function getGuildActivityStatus(id: number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) {
|
export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) {
|
||||||
console.log('****',dicGuildActivity.startTime, dicGuildActivity.startMinute)
|
let startTime = getCurHourPoint(dicGuildActivity.startTime, dicGuildActivity.startMinute, dicGuildActivity.startSeconds);
|
||||||
let startTime = getCurHourPoint(dicGuildActivity.startTime, dicGuildActivity.startMinute);
|
|
||||||
let countdownTime = getCurHourPoint(dicGuildActivity.countDown);
|
let countdownTime = getCurHourPoint(dicGuildActivity.countDown);
|
||||||
let { duringTime, openDay } = dicGuildActivity;
|
let { duringTime, openDay } = dicGuildActivity;
|
||||||
let endTime = startTime + duringTime;
|
let endTime = startTime + duringTime;
|
||||||
@@ -308,20 +307,18 @@ export async function sendGuildActEndMsg(aid: number) {
|
|||||||
for(let { serverId, cityId } of cities) {
|
for(let { serverId, cityId } of cities) {
|
||||||
await cityActivitySettleReward(cityId, serverId);
|
await cityActivitySettleReward(cityId, serverId);
|
||||||
}
|
}
|
||||||
// 发完之后再做下周自动宣战
|
|
||||||
let serverlists = await getAllServers();
|
|
||||||
for(let serverId of serverlists) {
|
|
||||||
await autoDeclare(serverId);
|
|
||||||
}
|
|
||||||
cityActivityObj = new CityActivityObject();
|
cityActivityObj = new CityActivityObject();
|
||||||
} else if (aid == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
} else if (aid == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
|
||||||
let obj = getRaceActivityObj();
|
let obj = getRaceActivityObj();
|
||||||
let woodenHorseList = obj.getAllWoodenHorses();
|
|
||||||
for(let [guildCode, woodenHorse] of woodenHorseList) {
|
for(let {guildCode, serverId} of obj.guildList) {
|
||||||
|
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
|
||||||
|
if(woodenHorse) {
|
||||||
await raceActivitySettleReward(guildCode, woodenHorse);
|
await raceActivitySettleReward(guildCode, woodenHorse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 全服发送结束新号
|
// 全服发送结束新号
|
||||||
export async function sendEndMsgToAll() {
|
export async function sendEndMsgToAll() {
|
||||||
@@ -474,13 +471,14 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
|
|||||||
/**
|
/**
|
||||||
* 清空完declareGuilds之后,做下一次活动的自动宣战
|
* 清空完declareGuilds之后,做下一次活动的自动宣战
|
||||||
*/
|
*/
|
||||||
async function autoDeclare(serverId: number) {
|
export async function autoDeclare(serverId: number) {
|
||||||
let allCities = await GuildActivityCityModel.getAllCities(serverId);
|
let allCities = await GuildActivityCityModel.getAllCities(serverId);
|
||||||
let guardList = new Array<{ cityId: number, guardGuildCode: string }>();
|
let guardList = new Array<{ cityId: number, guardGuildCode: string }>();
|
||||||
for (let { cityId, guardGuildCode } of allCities) {
|
for (let { cityId, guardGuildCode } of allCities) {
|
||||||
guardList.push({ cityId, guardGuildCode });
|
guardList.push({ cityId, guardGuildCode });
|
||||||
await GuildActivityCityModel.guard(serverId, cityId, "", "");
|
await GuildActivityCityModel.clearGuard(serverId, cityId);
|
||||||
}
|
}
|
||||||
|
console.log(JSON.stringify(guardList));
|
||||||
for (let { cityId, guardGuildCode } of guardList) {
|
for (let { cityId, guardGuildCode } of guardList) {
|
||||||
let dicCity = gameData.cityActivity.get(cityId);
|
let dicCity = gameData.cityActivity.get(cityId);
|
||||||
if (guardGuildCode && dicCity.nextCity) {
|
if (guardGuildCode && dicCity.nextCity) {
|
||||||
@@ -557,17 +555,17 @@ export function getCityStatus(guildCode: string, cityId: number, dic: DicCityAct
|
|||||||
status = CITY_STATUS.DECLARED;
|
status = CITY_STATUS.DECLARED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let hasGuard = false, hasDeclared = false;
|
// let hasGuard = false, hasDeclared = false;
|
||||||
for(let { cityId: _cityId, guardGuildCode, declareGuilds } of dbCities) {
|
// for(let { cityId: _cityId, guardGuildCode, declareGuilds } of dbCities) {
|
||||||
let dicCity = gameData.cityActivity.get(_cityId);
|
// let dicCity = gameData.cityActivity.get(_cityId);
|
||||||
if(dicCity.type == dic.type) {
|
// if(dicCity.type == dic.type) {
|
||||||
if(guardGuildCode == guildCode) hasGuard = true;
|
// if(guardGuildCode == guildCode) hasGuard = true;
|
||||||
if(declareGuilds.includes(guildCode)) hasDeclared = true;
|
// if(declareGuilds.includes(guildCode)) hasDeclared = true;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if(status == CITY_STATUS.CAN_DECLARE && !hasDeclared && preCity.length > 0) {
|
// if(status == CITY_STATUS.CAN_DECLARE && !hasDeclared && preCity.length > 0) {
|
||||||
status = CITY_STATUS.NOT_OPEN;
|
// status = CITY_STATUS.NOT_OPEN;
|
||||||
}
|
// }
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -588,7 +586,7 @@ export async function calWoodenHorseAndSend(serverId: number) {
|
|||||||
for(let i = 0; i < l; i++) {
|
for(let i = 0; i < l; i++) {
|
||||||
let { rank, code, name, num } = ranks[i]
|
let { rank, code, name, num } = ranks[i]
|
||||||
let _obj = await obj.getWoodenHorse(code, serverId);
|
let _obj = await obj.getWoodenHorse(code, serverId);
|
||||||
let param = new SimpleGuildRankWithTimeParam(rank, code, name, num, _obj?_obj.time:0, _obj?_obj.durability:0);
|
let param = new SimpleGuildRankWithTimeParam(rank, code, name, _obj?_obj.distance:0, _obj?_obj.time:0, _obj?_obj.durability:0);
|
||||||
guildRank.push(param);
|
guildRank.push(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -677,5 +675,5 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 删除数据
|
// 删除数据
|
||||||
obj.deleteRecord(guildCode);
|
obj.deleteFromList(guildCode);
|
||||||
}
|
}
|
||||||
@@ -607,7 +607,11 @@ async function generateUnionRank(key: string, serverId: number, timelen = 10) {
|
|||||||
|
|
||||||
let pow = Math.pow(10, timelen + 1);
|
let pow = Math.pow(10, timelen + 1);
|
||||||
await redisClient().zunionstoreAsync(unionKey, 2, originKey, timeKey, 'WEIGHTS', pow, 1);
|
await redisClient().zunionstoreAsync(unionKey, 2, originKey, timeKey, 'WEIGHTS', pow, 1);
|
||||||
|
if(originKey.indexOf(REDIS_KEY.RACE_ACTIVITY) == -1) {
|
||||||
await redisClient().expireAsync(unionKey, 10); // 10秒更新一次
|
await redisClient().expireAsync(unionKey, 10); // 10秒更新一次
|
||||||
|
} else {
|
||||||
|
await redisClient().expireAsync(unionKey, 1); // 1秒更新一次
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return unionKey;
|
return unionKey;
|
||||||
}
|
}
|
||||||
@@ -621,7 +625,7 @@ async function generateUnionRank(key: string, serverId: number, timelen = 10) {
|
|||||||
export async function getUnionRank(key: string, serverId: number, roleId: string, timelen = 10, limit = 100) {
|
export async function getUnionRank(key: string, serverId: number, roleId: string, timelen = 10, limit = 100) {
|
||||||
|
|
||||||
let ranks = [], myRank = null;
|
let ranks = [], myRank = null;
|
||||||
let unionKey = await generateUnionRank(key, serverId);
|
let unionKey = await generateUnionRank(key, serverId, timelen);
|
||||||
const rankFromDb = await redisClient().zrevrangebyscoreAsync(unionKey, '+inf', '-inf', "WITHSCORES", "LIMIT", 0, limit);
|
const rankFromDb = await redisClient().zrevrangebyscoreAsync(unionKey, '+inf', '-inf', "WITHSCORES", "LIMIT", 0, limit);
|
||||||
|
|
||||||
let _key = key.split(':')[0];
|
let _key = key.split(':')[0];
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import { STATUS } from '../consts/statusCode';
|
|||||||
import { getMailContent, sendMail } from './mailService';
|
import { getMailContent, sendMail } from './mailService';
|
||||||
import { reportOnline } from '../pubUtils/httpUtil';
|
import { reportOnline } from '../pubUtils/httpUtil';
|
||||||
import { UserModel } from '../db/User';
|
import { UserModel } from '../db/User';
|
||||||
import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll } from './guildActivityService';
|
import { getGuildActivityByDic, setMedianCe, sendEndMsgToAll, autoDeclare } from './guildActivityService';
|
||||||
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
import { sendUngotDividendJob, startGuildAuction, startWorldAuction, stopAuction } from './auctionService';
|
||||||
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
|
import { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
|
||||||
import { GuildModel } from '../db/Guild';
|
import { GuildModel } from '../db/Guild';
|
||||||
@@ -357,8 +357,7 @@ async function guildActivitySchedule() {
|
|||||||
}
|
}
|
||||||
await delGuildActivityRank(dicGuildActivity.id, map);
|
await delGuildActivityRank(dicGuildActivity.id, map);
|
||||||
|
|
||||||
|
scheduleJob('guildActivityStart', `${dicGuildActivity.startSeconds} ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule);
|
||||||
scheduleJob('guildActivityStart', `0 ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule);
|
|
||||||
|
|
||||||
let statusResult = getGuildActivityByDic(dicGuildActivity);
|
let statusResult = getGuildActivityByDic(dicGuildActivity);
|
||||||
if(!statusResult) return;
|
if(!statusResult) return;
|
||||||
@@ -466,6 +465,11 @@ export async function cityActivityEnd() {
|
|||||||
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
await pinus.app.rpc.guild.guildActivityRemote.guildActivityEnd.toServer(id, GUILD_ACTIVITY_TYPE.CITY_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 发完之后再做下周自动宣战
|
||||||
|
let serverlists = await getAllServers();
|
||||||
|
for(let serverId of serverlists) {
|
||||||
|
await autoDeclare(serverId);
|
||||||
|
}
|
||||||
if(guildActSecondsJobId) {
|
if(guildActSecondsJobId) {
|
||||||
guildActSecondsJobId.cancel();
|
guildActSecondsJobId.cancel();
|
||||||
guildActSecondsJobId = undefined;
|
guildActSecondsJobId = undefined;
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
|
|||||||
} else if (['guild.raceActivityHandler.getRaceActivity',
|
} else if (['guild.raceActivityHandler.getRaceActivity',
|
||||||
'guild.raceActivityHandler.join',
|
'guild.raceActivityHandler.join',
|
||||||
'guild.raceActivityHandler.getRace',
|
'guild.raceActivityHandler.getRace',
|
||||||
|
'guild.raceActivityHandler.useItem',
|
||||||
|
'guild.raceActivityHandler.battleEnd',
|
||||||
].indexOf(arg.route) !== -1) {
|
].indexOf(arg.route) !== -1) {
|
||||||
rid = session.get('serverId').toString();
|
rid = session.get('serverId').toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,6 +208,8 @@ export const STATUS = {
|
|||||||
HAS_NOT_DECLARED: { code: 21105, simStr: '军团还未宣战过' },
|
HAS_NOT_DECLARED: { code: 21105, simStr: '军团还未宣战过' },
|
||||||
GUILD_ACTIVITY_IS_OPEN: { code: 21106, simStr: '活动已开启' },
|
GUILD_ACTIVITY_IS_OPEN: { code: 21106, simStr: '活动已开启' },
|
||||||
RACE_HAS_JOIN: { code: 21107, simStr: '已登机' },
|
RACE_HAS_JOIN: { code: 21107, simStr: '已登机' },
|
||||||
|
CITY_IS_GUARD: { code: 21108, simStr: '活动已开启' },
|
||||||
|
CAN_NOT_DECLARE: { code: 21109, simStr: '该城池不可宣战' },
|
||||||
|
|
||||||
// 通用 30000 - 30099
|
// 通用 30000 - 30099
|
||||||
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
DIC_DATA_NOT_FOUND: { code: 30000, simStr: '数据表未找到' },
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ export default class GuildActivityCity extends BaseModel {
|
|||||||
return rec;
|
return rec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async getCity(serverId: number, cityId: number) {
|
||||||
|
let curWeek = getCurWeekDate(1, 0);
|
||||||
|
let rec: GuildActivityCityType = await GuildActivityCityModel.findOne({ serverId, cityId, createdAt: { $gte: curWeek }}).lean();
|
||||||
|
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
// 检查是否宣战过
|
// 检查是否宣战过
|
||||||
public static async checkDeclartion(serverId: number, guildCode: string) {
|
public static async checkDeclartion(serverId: number, guildCode: string) {
|
||||||
let curWeek = getCurWeekDate(1, 0);
|
let curWeek = getCurWeekDate(1, 0);
|
||||||
@@ -59,7 +66,18 @@ export default class GuildActivityCity extends BaseModel {
|
|||||||
let curWeek = getCurWeekDate(1, 0);
|
let curWeek = getCurWeekDate(1, 0);
|
||||||
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
|
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
|
||||||
{ serverId, cityId, createdAt: { $gte: curWeek } },
|
{ serverId, cityId, createdAt: { $gte: curWeek } },
|
||||||
{ $set: { declareCount: 0, declareGuilds: [], guardGuildCode: guildCode, guardGuildName: guildName, guardTime: new Date()} },
|
{ $set: { guardGuildCode: guildCode, guardGuildName: guildName, guardTime: new Date()} },
|
||||||
|
{ new: true }).lean();
|
||||||
|
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 活动结束后需要清空占领情况
|
||||||
|
public static async clearGuard(serverId: number, cityId: number) {
|
||||||
|
let curWeek = getCurWeekDate(1, 0);
|
||||||
|
let rec: GuildActivityCityType = await GuildActivityCityModel.findOneAndUpdate(
|
||||||
|
{ serverId, cityId, createdAt: { $gte: curWeek } },
|
||||||
|
{ $set: { guardGuildCode: "", guardGuildName: "", declareCount: 0, declareGuilds: [] } },
|
||||||
{ new: true }).lean();
|
{ new: true }).lean();
|
||||||
|
|
||||||
return rec;
|
return rec;
|
||||||
|
|||||||
@@ -215,6 +215,8 @@ export class CityActivityObject {
|
|||||||
|
|
||||||
// 军团诸侯混战等数据
|
// 军团诸侯混战等数据
|
||||||
export class RaceActivityObject {
|
export class RaceActivityObject {
|
||||||
|
private status = 0; // 活动状态 0-未开始 1-已开始 2-已结束
|
||||||
|
public guildList: Array<{ serverId: number, guildCode: string }> = []; // 所有军团
|
||||||
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
private members: Map<string, Array<Member>> = new Map(); // 每个军团参与的成员 guildCode => [{roleId, job}]
|
||||||
private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
|
private woodenHorses: Map<string, WoodenHorse> = new Map(); // 每个军团的木牛流马 guildCode => WoodenHorse
|
||||||
private events: Map<string, Event[]> = new Map(); // 每个军团遇到的事件
|
private events: Map<string, Event[]> = new Map(); // 每个军团遇到的事件
|
||||||
@@ -247,7 +249,11 @@ export class RaceActivityObject {
|
|||||||
if(!woodenHorse) return false;
|
if(!woodenHorse) return false;
|
||||||
woodenHorse.joinMember(roleId, roleName, sid)
|
woodenHorse.joinMember(roleId, roleName, sid)
|
||||||
this.pushMember(guildCode, roleId, job);
|
this.pushMember(guildCode, roleId, job);
|
||||||
this.handleItems(woodenHorse);
|
|
||||||
|
if(this.status == 1) {
|
||||||
|
let item = getRaceEventItems();
|
||||||
|
this.handleItems(roleId, sid, item);
|
||||||
|
}
|
||||||
return woodenHorse;
|
return woodenHorse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,29 +267,35 @@ export class RaceActivityObject {
|
|||||||
let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, leader);
|
let guildRankParam = new GuildRankParam(guild.icon, guild.name, guild.lv, leader);
|
||||||
await setRank(REDIS_KEY.RACE_ACTIVITY, serverId, guild.code, 0, Math.pow(10, 11) - guild.guildCe, guildRankParam, true);
|
await setRank(REDIS_KEY.RACE_ACTIVITY, serverId, guild.code, 0, Math.pow(10, 11) - guild.guildCe, guildRankParam, true);
|
||||||
let { name: guildName, guildCe } = guild;
|
let { name: guildName, guildCe } = guild;
|
||||||
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildName, guildCe, serverId))
|
this.woodenHorses.set(guildCode, new WoodenHorse(guildCode, guildName, guildCe, serverId));
|
||||||
|
this.guildList.push({guildCode, serverId});
|
||||||
|
if(this.status == 1) {
|
||||||
|
this.woodenHorseStartRace(this.woodenHorses.get(guildCode));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let woodenHorse = this.woodenHorses.get(guildCode);
|
let woodenHorse = this.woodenHorses.get(guildCode);
|
||||||
let events = this.events.get(guildCode)||[];
|
let events = this.events.get(guildCode)||[];
|
||||||
woodenHorse.calCurWoodenHorse(events);
|
let needSendEnd = woodenHorse.calCurWoodenHorse(events);
|
||||||
if(woodenHorse.status == 1 || woodenHorse.status == 2) { // 更新距离
|
if(woodenHorse.status == 1 || woodenHorse.status == 2) { // 更新距离
|
||||||
await setRankWithoutUserInfo(REDIS_KEY.RACE_ACTIVITY, serverId, guildCode, woodenHorse.distance, Math.floor((woodenHorse.time - woodenHorse.startTime)/1000), true, false);
|
await setRankWithoutUserInfo(REDIS_KEY.RACE_ACTIVITY, serverId, guildCode, woodenHorse.distance, Math.floor((woodenHorse.time - woodenHorse.startTime)/1000), true, false);
|
||||||
if (woodenHorse.status == 2) { // 抵达后发送奖励,发送消息,结算
|
if (needSendEnd) { // 抵达后发送奖励,发送消息,结算
|
||||||
await sendSingleRaceActEndMsg(guildCode, woodenHorse);
|
await sendSingleRaceActEndMsg(guildCode, woodenHorse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.handleItems(woodenHorse);
|
this.handleItemsByWoodenHorse(woodenHorse);
|
||||||
return woodenHorse;
|
return woodenHorse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async useItem(fromRoleId: string, sid: string, fromGuild: string, toGuild: string, id: number, count: number) {
|
public async useItem(fromRoleId: string, sid: string, fromGuild: string, toGuild: string, id: number, count: number) {
|
||||||
let rec = this.handleItem(fromRoleId, sid, id, count);
|
let rec = this.handleItems(fromRoleId, sid, [{id, count: -1 * count}]);
|
||||||
if(!rec) return false;
|
if(!rec) return false;
|
||||||
let event = new Event(id, fromGuild, toGuild, count);
|
let event = new Event(id, fromGuild, toGuild, count);
|
||||||
if(!this.events.has(toGuild)) {
|
if(!this.events.has(toGuild)) {
|
||||||
this.events.set(toGuild, [event]);
|
this.events.set(toGuild, [event]);
|
||||||
} else {
|
} else {
|
||||||
this.events.get(toGuild).push(event);
|
let events = this.events.get(toGuild)||[];
|
||||||
|
events.push(event);
|
||||||
|
this.events.set(toGuild, events);
|
||||||
}
|
}
|
||||||
let chatSid = await getGuildChannelSid(toGuild);
|
let chatSid = await getGuildChannelSid(toGuild);
|
||||||
pinus.app.rpc.chat.guildRemote.sendRaceEvent.toServer(chatSid, toGuild, [event]);
|
pinus.app.rpc.chat.guildRemote.sendRaceEvent.toServer(chatSid, toGuild, [event]);
|
||||||
@@ -293,22 +305,25 @@ export class RaceActivityObject {
|
|||||||
|
|
||||||
// 定时任务到,开始比赛,设置开始赛道,发放初始道具
|
// 定时任务到,开始比赛,设置开始赛道,发放初始道具
|
||||||
public startRace() {
|
public startRace() {
|
||||||
|
this.status = 1;
|
||||||
let guildCodes = new Array<string>();
|
let guildCodes = new Array<string>();
|
||||||
for(let [code, woodenHorse] of this.woodenHorses) {
|
for(let [code, woodenHorse] of this.woodenHorses) {
|
||||||
|
this.woodenHorseStartRace(woodenHorse);
|
||||||
|
guildCodes.push(code);
|
||||||
|
}
|
||||||
|
return guildCodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
private woodenHorseStartRace(woodenHorse: WoodenHorse) {
|
||||||
woodenHorse.status = 1;
|
woodenHorse.status = 1;
|
||||||
woodenHorse.time = Date.now();
|
woodenHorse.time = Date.now();
|
||||||
woodenHorse.startTime = Date.now();
|
woodenHorse.startTime = Date.now();
|
||||||
let members = woodenHorse.members;
|
let members = woodenHorse.members;
|
||||||
for(let { roleId, sid } of members) {
|
for(let { roleId, sid } of members) {
|
||||||
let item = getRaceEventItems();
|
let item = getRaceEventItems();
|
||||||
for(let { id, count } of item) {
|
this.handleItems(roleId, sid, item);
|
||||||
this.handleItem(roleId, sid, id, count);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
guildCodes.push(code);
|
|
||||||
}
|
|
||||||
return guildCodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始进入就随机9个灵球事件
|
// 初始进入就随机9个灵球事件
|
||||||
public initEvents(guildCode: string) {
|
public initEvents(guildCode: string) {
|
||||||
@@ -327,10 +342,10 @@ export class RaceActivityObject {
|
|||||||
|
|
||||||
for(let [distance, type] of dicEncounter.events) {
|
for(let [distance, type] of dicEncounter.events) {
|
||||||
if(type == RACE_EVENT_TYPE.ITEM) {
|
if(type == RACE_EVENT_TYPE.ITEM) {
|
||||||
let event = new Event(RACE_EVENT.ITEM, guildCode, guildCode, distance);
|
let event = new Event(RACE_EVENT.ITEM, guildCode, guildCode, 1, distance);
|
||||||
this.events.get(guildCode).push(event);
|
this.events.get(guildCode).push(event);
|
||||||
} else if (type == RACE_EVENT_TYPE.EVENT) {
|
} else if (type == RACE_EVENT_TYPE.EVENT) {
|
||||||
let event = new Event(events[index], guildCode, guildCode, distance);
|
let event = new Event(events[index], guildCode, guildCode, 1, distance);
|
||||||
this.events.get(guildCode).push(event);
|
this.events.get(guildCode).push(event);
|
||||||
index ++;
|
index ++;
|
||||||
}
|
}
|
||||||
@@ -353,38 +368,40 @@ export class RaceActivityObject {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleItems(woodenHorse: WoodenHorse) {
|
private handleItemsByWoodenHorse(woodenHorse: WoodenHorse) {
|
||||||
let { members } = woodenHorse;
|
let { members } = woodenHorse;
|
||||||
for(let { roleId, sid, items = [] } of members) {
|
for(let curMember of members) {
|
||||||
for(let {id, count} of items) {
|
let { roleId, sid, items = [] } = curMember;
|
||||||
this.handleItem(roleId, sid, id, count);
|
if(items.length > 0) this.handleItems(roleId, sid, items);
|
||||||
}
|
curMember.items = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleItem(roleId: string, sid: string, id: number, inc: number) {
|
private handleItems(roleId: string, sid: string, incItems: {id: number, count: number}[]) {
|
||||||
let items = this.items.get(roleId)||[];
|
let items = this.items.get(roleId)||[];
|
||||||
|
let sendItems = new Array<{id: number, count: number}>();
|
||||||
|
for(let {id, count: inc} of incItems) {
|
||||||
let curItem = items.find(cur => cur.id == id);
|
let curItem = items.find(cur => cur.id == id);
|
||||||
if(!curItem && inc < 0) return false;
|
|
||||||
if(!curItem) {
|
if(!curItem) {
|
||||||
curItem = { id, count: 0 };
|
curItem = { id, count: 0 };
|
||||||
items.push(curItem);
|
items.push(curItem);
|
||||||
}
|
}
|
||||||
if(curItem.count + inc < 0 ) return false;
|
if(curItem.count + inc < 0 ) return false;
|
||||||
|
if(inc != 0) {
|
||||||
curItem.count += inc;
|
curItem.count += inc;
|
||||||
|
sendItems.push({ id, count: curItem.count });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.items.set(roleId, items);
|
||||||
let uids = [{uid: roleId, sid}];
|
let uids = [{uid: roleId, sid}];
|
||||||
pinus.app.get('channelService').pushMessageByUids('onRaceItemUpdate', resResult(STATUS.SUCCESS, { items }), uids);
|
pinus.app.get('channelService').pushMessageByUids('onRaceItemUpdate', resResult(STATUS.SUCCESS, { items: sendItems }), uids);
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public deleteRecord(guildCode: string) {
|
public deleteFromList(guildCode: string) {
|
||||||
let members = this.members.get(guildCode);
|
let index = this.guildList.findIndex(cur => cur.guildCode == guildCode);
|
||||||
this.woodenHorses.delete(guildCode);
|
this.guildList.splice(index, 1);
|
||||||
this.events.delete(guildCode);
|
|
||||||
for(let roleId of members) {
|
|
||||||
this.items.delete(roleId.roleId);
|
|
||||||
}
|
|
||||||
this.members.delete(guildCode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,27 +452,31 @@ export class WoodenHorse {
|
|||||||
this.serverId = serverId;
|
this.serverId = serverId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public calCurWoodenHorse(events: Event[]) {
|
/**
|
||||||
|
* 根据时间计算当前木马速度距离耐久等
|
||||||
|
* @param events
|
||||||
|
* @returns {boolean} needSendEnd 是否跑到终点发送结束新号
|
||||||
|
*/
|
||||||
|
public calCurWoodenHorse(events: Event[]): boolean {
|
||||||
|
console.log('**', JSON.stringify(events))
|
||||||
|
if(this.status == 2) return false;
|
||||||
if(this.status == 0 && this.stopContinueTime && Date.now() > this.stopContinueTime) {
|
if(this.status == 0 && this.stopContinueTime && Date.now() > this.stopContinueTime) {
|
||||||
this.status = 1; this.stopContinueTime = 0;
|
this.status = 1; this.stopContinueTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.status == 1) {
|
if(this.status == 1) {
|
||||||
this.distance += Math.floor((Date.now() - this.time)/1000 * 10 * this.speed)/10; // 1位小数点
|
|
||||||
this.time = Date.now();
|
|
||||||
|
|
||||||
if(this.distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH) {
|
if(this.distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH) {
|
||||||
this.distance = GUILDACTIVITY.RACEACTIVITY_LENGTH;
|
this.distance = GUILDACTIVITY.RACEACTIVITY_LENGTH;
|
||||||
// TODO发送结束信号
|
|
||||||
this.status = 2;
|
this.status = 2;
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
this.distance += Math.floor((Date.now() - this.time)/1000 * 10 * this.speed)/10; // 1位小数点
|
||||||
|
this.time = Date.now();
|
||||||
}
|
}
|
||||||
let effectiveEvents = new Array<Event>();
|
let effectiveEvents = new Array<Event>();
|
||||||
let delEvents = new Array<number>();
|
let delEvents = new Array<number>();
|
||||||
for(let i = 0; i < events.length; i++) {
|
for(let i = 0; i < events.length; i++) {
|
||||||
let event = events[i];
|
let event = events[i];
|
||||||
console.log('******', this.distance, event.startDistance, event.endDistance)
|
|
||||||
if(!event.startTime && event.startDistance && this.distance > event.startDistance) {
|
if(!event.startTime && event.startDistance && this.distance > event.startDistance) {
|
||||||
let startTime = Date.now() - Math.floor((this.distance - event.startDistance) / this.speed);
|
let startTime = Date.now() - Math.floor((this.distance - event.startDistance) / this.speed);
|
||||||
event.setStartTime(startTime); // 距离生效的事件的实际生效时间,主要用于速度叠加顺序
|
event.setStartTime(startTime); // 距离生效的事件的实际生效时间,主要用于速度叠加顺序
|
||||||
@@ -466,6 +487,12 @@ export class WoodenHorse {
|
|||||||
} else if (event.startDistance <= this.distance && event.endDistance > this.distance) {
|
} else if (event.startDistance <= this.distance && event.endDistance > this.distance) {
|
||||||
isEffective = true;
|
isEffective = true;
|
||||||
} else if (event.endTime < Date.now() || event.endDistance < this.distance) {
|
} else if (event.endTime < Date.now() || event.endDistance < this.distance) {
|
||||||
|
if(event.endTime && event.startTime == event.endTime) {
|
||||||
|
isEffective = true;
|
||||||
|
}
|
||||||
|
if(event.endDistance && event.startDistance == event.endDistance) {
|
||||||
|
isEffective = true;
|
||||||
|
}
|
||||||
delEvents.push(i);
|
delEvents.push(i);
|
||||||
}
|
}
|
||||||
if(isEffective) {
|
if(isEffective) {
|
||||||
@@ -475,28 +502,31 @@ export class WoodenHorse {
|
|||||||
for(let i of delEvents) events.splice(i, 1); // 删除过期事件
|
for(let i of delEvents) events.splice(i, 1); // 删除过期事件
|
||||||
effectiveEvents.sort((a, b) => a.startTime - b.startTime);
|
effectiveEvents.sort((a, b) => a.startTime - b.startTime);
|
||||||
this.speed = this.memberCnt * 10;
|
this.speed = this.memberCnt * 10;
|
||||||
console.log('******', effectiveEvents.length);
|
|
||||||
for(let { id, count, endTime } of effectiveEvents) {
|
for(let { id, count, endTime } of effectiveEvents) {
|
||||||
this.calEvent(id, count, endTime);
|
this.calEvent(id, count, endTime);
|
||||||
}
|
}
|
||||||
return this;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private calEvent(id: number, count: number = 1, endTime?: number) {
|
private calEvent(id: number, count: number = 1, endTime?: number) {
|
||||||
let { effect } = gameData.raceActivityEvents.get(id);
|
let { effect } = gameData.raceActivityEvents.get(id);
|
||||||
|
|
||||||
|
console.log('**********', effect, id)
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case RACE_EVENT.LIANNU:
|
case RACE_EVENT.LIANNU:
|
||||||
if (this.shieldTime > Date.now()) {
|
if (this.shieldTime < Date.now()) {
|
||||||
if (this.shield >= count) {
|
if (this.shield >= count) {
|
||||||
this.shield -= count;
|
this.shield -= count;
|
||||||
} else {
|
} else {
|
||||||
|
this.shield = 0;
|
||||||
this.durability -= (count - this.shield) * effect[0];
|
this.durability -= (count - this.shield) * effect[0];
|
||||||
|
if(this.durability > 100) this.durability = 100;
|
||||||
|
if(this.durability < 0) this.durability = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RACE_EVENT.GUISHOUYINFU:
|
case RACE_EVENT.GUISHOUYINFU:
|
||||||
if (this.shieldTime > Date.now()) {
|
if (this.shieldTime < Date.now()) {
|
||||||
this.stopContinueTime = endTime;
|
this.stopContinueTime = endTime;
|
||||||
this.status = 0;
|
this.status = 0;
|
||||||
}
|
}
|
||||||
@@ -513,26 +543,36 @@ export class WoodenHorse {
|
|||||||
case RACE_EVENT.JIANSU_2:
|
case RACE_EVENT.JIANSU_2:
|
||||||
this.speed += effect[0]; break;
|
this.speed += effect[0]; break;
|
||||||
case RACE_EVENT.HUIFU_1:
|
case RACE_EVENT.HUIFU_1:
|
||||||
this.durability += effect[0]; break;
|
this.durability += effect[0];
|
||||||
|
if(this.durability > 100) this.durability = 100;
|
||||||
|
if(this.durability < 0) this.durability = 0;
|
||||||
|
break;
|
||||||
case RACE_EVENT.JIANSU_1:
|
case RACE_EVENT.JIANSU_1:
|
||||||
this.speed *= Math.pow(1 - effect[0] / 100, count); break;
|
this.speed *= Math.pow(1 - effect[0] / 100, count); break;
|
||||||
case RACE_EVENT.JIANSU_2:
|
case RACE_EVENT.JIANSU_2:
|
||||||
this.speed -= effect[0]; break;
|
this.speed -= effect[0]; break;
|
||||||
case RACE_EVENT.SHANGHAI_1:
|
case RACE_EVENT.SHANGHAI_1:
|
||||||
this.durability -= effect[0]; break;
|
this.durability -= effect[0];
|
||||||
|
if(this.durability > 100) this.durability = 100;
|
||||||
|
if(this.durability < 0) this.durability = 0;
|
||||||
|
break;
|
||||||
case RACE_EVENT.ITEM:
|
case RACE_EVENT.ITEM:
|
||||||
let ranMember: WoodenHorseMember[] = getRandEelm(this.members, GUILDACTIVITY.RACEACTIVITY_EVENT_MEMBERCNT);
|
let ranMember: WoodenHorseMember[] = getRandEelm(this.members, GUILDACTIVITY.RACEACTIVITY_EVENT_MEMBERCNT);
|
||||||
if(ranMember.length <= 0) ranMember = this.members;
|
if(ranMember.length <= 0) ranMember = this.members;
|
||||||
for(let obj of ranMember) {
|
for(let obj of ranMember) {
|
||||||
let item = gameData.raceEventItems;
|
let item = gameData.raceEventItems;
|
||||||
obj.items = obj.items.concat(item);
|
obj.items = (obj.items||[]).concat(item);
|
||||||
}
|
}
|
||||||
for(let obj of this.members) {
|
for(let obj of this.members) {
|
||||||
let item = getRaceEventItems();
|
let item = getRaceEventItems();
|
||||||
obj.items = obj.items.concat(item);
|
obj.items = (obj.items||[]).concat(item);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if(this.durability <= 0) {
|
||||||
|
this.status = 0;
|
||||||
|
this.speed = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -565,7 +605,7 @@ export class Event {
|
|||||||
@prop({required: true})
|
@prop({required: true})
|
||||||
count: number = 1;
|
count: number = 1;
|
||||||
|
|
||||||
constructor(id: number, fromGuild: string, toGuild: string, distance?: number, count?: number) {
|
constructor(id: number, fromGuild: string, toGuild: string, count?: number, distance?: number) {
|
||||||
let dicEvent = gameData.raceActivityEvents.get(id);
|
let dicEvent = gameData.raceActivityEvents.get(id);
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.fromGuild = fromGuild;
|
this.fromGuild = fromGuild;
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ export const gameData = {
|
|||||||
raceTypes: dicRaceTypes,
|
raceTypes: dicRaceTypes,
|
||||||
raceActivityEncounter: decodeRaceActivityEncounter(),
|
raceActivityEncounter: decodeRaceActivityEncounter(),
|
||||||
raceNormalItems: decodeRaceNormalItems(),
|
raceNormalItems: decodeRaceNormalItems(),
|
||||||
raceEventItems: parseGoodStr(GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS||"")
|
raceEventItems: decodeRaceEventItems()
|
||||||
};
|
};
|
||||||
|
|
||||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||||
@@ -528,11 +528,16 @@ function decodeRaceNormalItems() {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function decodeRaceEventItems() {
|
||||||
|
let str = GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS||"";
|
||||||
|
return parseGoodStr(str);
|
||||||
|
}
|
||||||
|
|
||||||
export function getRaceEventItems() {
|
export function getRaceEventItems() {
|
||||||
let items = gameData.raceNormalItems;
|
let items = gameData.raceNormalItems;
|
||||||
let result = new Array<RewardInter>();
|
let result = new Array<RewardInter>();
|
||||||
for(let {id, min, max} of items) {
|
for(let {id, min, max} of items) {
|
||||||
let count = getRandValueByMinMax(min, max);
|
let count = getRandValueByMinMax(min, max, 0);
|
||||||
result.push({ id, count });
|
result.push({ id, count });
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -114,3 +114,8 @@ export const GUILD_AUCTION = {
|
|||||||
export const BROWSER_DEBUG = {
|
export const BROWSER_DEBUG = {
|
||||||
UNLIMITED_MOVEMENT: 0, // 无限行动
|
UNLIMITED_MOVEMENT: 0, // 无限行动
|
||||||
};
|
};
|
||||||
|
export const SHOP = {
|
||||||
|
HERO_SOUL_BULE: 1000, // 蓝将回收军功
|
||||||
|
HERO_SOUL_PURPLE: 5000, // 紫将回收军功
|
||||||
|
HERO_SOUL_GOLDEN: 10000, // 金将回收军功
|
||||||
|
};
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ export interface DicGuildActivity {
|
|||||||
// 开启时间 几点
|
// 开启时间 几点
|
||||||
startMinute: number;
|
startMinute: number;
|
||||||
// 开始倒计时 几点
|
// 开始倒计时 几点
|
||||||
|
startSeconds: number;
|
||||||
|
// 开始倒计时 几点
|
||||||
readonly countDown: number;
|
readonly countDown: number;
|
||||||
// 对应关卡id
|
// 对应关卡id
|
||||||
readonly warid: number;
|
readonly warid: number;
|
||||||
@@ -30,7 +32,10 @@ export const dicGuildActivity = new Map<number, DicGuildActivity>();
|
|||||||
|
|
||||||
arr.forEach(o => {
|
arr.forEach(o => {
|
||||||
o.openDay = parseNumberList(o.openDay);
|
o.openDay = parseNumberList(o.openDay);
|
||||||
if(!o.startMinute) o.startMinute = 0;
|
let time = o.startTime.split(':');
|
||||||
|
o.startTime = parseInt(time[0]);
|
||||||
|
o.startMinute = parseInt(time[1]);
|
||||||
|
o.startSeconds = parseInt(time[2]);
|
||||||
dicGuildActivity.set( o.id, o );
|
dicGuildActivity.set( o.id, o );
|
||||||
});
|
});
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
@@ -84,11 +84,11 @@ export function getHourPoint(hour: number) {
|
|||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCurHourPoint(hour: number, minute: number = 0) {
|
export function getCurHourPoint(hour: number, minute: number = 0, seconds: number = 0) {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
date.setHours(hour);
|
date.setHours(hour);
|
||||||
date.setMinutes(minute);
|
date.setMinutes(minute);
|
||||||
date.setSeconds(0);
|
date.setSeconds(seconds);
|
||||||
var time = Math.floor(date.getTime() / PER_SECOND);
|
var time = Math.floor(date.getTime() / PER_SECOND);
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -499,7 +499,7 @@ export function parseNumberList(str: string) {
|
|||||||
let arr = decodeArrayStr(str, '&');
|
let arr = decodeArrayStr(str, '&');
|
||||||
for (let g of arr) {
|
for (let g of arr) {
|
||||||
if (g === "") continue;
|
if (g === "") continue;
|
||||||
res.push(parseInt(g));
|
res.push(parseFloat(g));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
"name": "蛮夷入侵",
|
"name": "蛮夷入侵",
|
||||||
"openDay": "3&0",
|
"openDay": "3&0",
|
||||||
"duringTime": 900,
|
"duringTime": 900,
|
||||||
"startTime": 14,
|
"startTime": "20:00:00",
|
||||||
"startMinute": 48,
|
|
||||||
"countDown": 5,
|
"countDown": 5,
|
||||||
"warid": 7001,
|
"warid": 7001,
|
||||||
"honour": 500
|
"honour": 500
|
||||||
@@ -15,8 +14,7 @@
|
|||||||
"name": "诸侯混战",
|
"name": "诸侯混战",
|
||||||
"openDay": "2&4&6",
|
"openDay": "2&4&6",
|
||||||
"duringTime": 900,
|
"duringTime": 900,
|
||||||
"startTime": 20,
|
"startTime": "20:00:00",
|
||||||
"startMinute": 0,
|
|
||||||
"countDown": 5,
|
"countDown": 5,
|
||||||
"warid": 7002,
|
"warid": 7002,
|
||||||
"honour": 500
|
"honour": 500
|
||||||
@@ -26,8 +24,7 @@
|
|||||||
"name": "粮草先行",
|
"name": "粮草先行",
|
||||||
"openDay": "1&5",
|
"openDay": "1&5",
|
||||||
"duringTime": 600,
|
"duringTime": 600,
|
||||||
"startTime": 20,
|
"startTime": "20:00:00",
|
||||||
"startMinute": 0,
|
|
||||||
"countDown": 5,
|
"countDown": 5,
|
||||||
"warid": 0,
|
"warid": 0,
|
||||||
"honour": 200
|
"honour": 200
|
||||||
|
|||||||
Reference in New Issue
Block a user