军团活动:修复粮草先行

This commit is contained in:
luying
2021-03-30 18:07:04 +08:00
parent ba5e139bee
commit 0d7a873a34
16 changed files with 202 additions and 104 deletions
@@ -91,8 +91,7 @@ export function getGuildActivityStatus(id: number) {
}
export function getGuildActivityByDic(dicGuildActivity: DicGuildActivity) {
console.log('****',dicGuildActivity.startTime, dicGuildActivity.startMinute)
let startTime = getCurHourPoint(dicGuildActivity.startTime, dicGuildActivity.startMinute);
let startTime = getCurHourPoint(dicGuildActivity.startTime, dicGuildActivity.startMinute, dicGuildActivity.startSeconds);
let countdownTime = getCurHourPoint(dicGuildActivity.countDown);
let { duringTime, openDay } = dicGuildActivity;
let endTime = startTime + duringTime;
@@ -308,17 +307,15 @@ export async function sendGuildActEndMsg(aid: number) {
for(let { serverId, cityId } of cities) {
await cityActivitySettleReward(cityId, serverId);
}
// 发完之后再做下周自动宣战
let serverlists = await getAllServers();
for(let serverId of serverlists) {
await autoDeclare(serverId);
}
cityActivityObj = new CityActivityObject();
} else if (aid == GUILD_ACTIVITY_TYPE.RACE_ACTIVITY) {
let obj = getRaceActivityObj();
let woodenHorseList = obj.getAllWoodenHorses();
for(let [guildCode, woodenHorse] of woodenHorseList) {
await raceActivitySettleReward(guildCode, woodenHorse);
for(let {guildCode, serverId} of obj.guildList) {
let woodenHorse = await obj.getWoodenHorse(guildCode, serverId);
if(woodenHorse) {
await raceActivitySettleReward(guildCode, woodenHorse);
}
}
}
}
@@ -474,13 +471,14 @@ export async function cityActivitySettleReward(cityId: number, serverId: number)
/**
* 清空完declareGuilds之后,做下一次活动的自动宣战
*/
async function autoDeclare(serverId: number) {
export async function autoDeclare(serverId: number) {
let allCities = await GuildActivityCityModel.getAllCities(serverId);
let guardList = new Array<{ cityId: number, guardGuildCode: string }>();
for (let { cityId, guardGuildCode } of allCities) {
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) {
let dicCity = gameData.cityActivity.get(cityId);
if (guardGuildCode && dicCity.nextCity) {
@@ -557,17 +555,17 @@ export function getCityStatus(guildCode: string, cityId: number, dic: DicCityAct
status = CITY_STATUS.DECLARED;
}
}
let hasGuard = false, hasDeclared = false;
for(let { cityId: _cityId, guardGuildCode, declareGuilds } of dbCities) {
let dicCity = gameData.cityActivity.get(_cityId);
if(dicCity.type == dic.type) {
if(guardGuildCode == guildCode) hasGuard = true;
if(declareGuilds.includes(guildCode)) hasDeclared = true;
}
}
if(status == CITY_STATUS.CAN_DECLARE && !hasDeclared && preCity.length > 0) {
status = CITY_STATUS.NOT_OPEN;
}
// let hasGuard = false, hasDeclared = false;
// for(let { cityId: _cityId, guardGuildCode, declareGuilds } of dbCities) {
// let dicCity = gameData.cityActivity.get(_cityId);
// if(dicCity.type == dic.type) {
// if(guardGuildCode == guildCode) hasGuard = true;
// if(declareGuilds.includes(guildCode)) hasDeclared = true;
// }
// }
// if(status == CITY_STATUS.CAN_DECLARE && !hasDeclared && preCity.length > 0) {
// status = CITY_STATUS.NOT_OPEN;
// }
return status;
}
@@ -588,7 +586,7 @@ export async function calWoodenHorseAndSend(serverId: number) {
for(let i = 0; i < l; i++) {
let { rank, code, name, num } = ranks[i]
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);
}
@@ -677,5 +675,5 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
}
// 删除数据
obj.deleteRecord(guildCode);
obj.deleteFromList(guildCode);
}
+6 -2
View File
@@ -607,7 +607,11 @@ async function generateUnionRank(key: string, serverId: number, timelen = 10) {
let pow = Math.pow(10, timelen + 1);
await redisClient().zunionstoreAsync(unionKey, 2, originKey, timeKey, 'WEIGHTS', pow, 1);
await redisClient().expireAsync(unionKey, 10); // 10秒更新一次
if(originKey.indexOf(REDIS_KEY.RACE_ACTIVITY) == -1) {
await redisClient().expireAsync(unionKey, 10); // 10秒更新一次
} else {
await redisClient().expireAsync(unionKey, 1); // 1秒更新一次
}
}
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) {
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);
let _key = key.split(':')[0];
+7 -3
View File
@@ -20,7 +20,7 @@ import { STATUS } from '../consts/statusCode';
import { getMailContent, sendMail } from './mailService';
import { reportOnline } from '../pubUtils/httpUtil';
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 { DicGuildActivity } from '../pubUtils/dictionary/DicGuildActivity';
import { GuildModel } from '../db/Guild';
@@ -357,8 +357,7 @@ async function guildActivitySchedule() {
}
await delGuildActivityRank(dicGuildActivity.id, map);
scheduleJob('guildActivityStart', `0 ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule);
scheduleJob('guildActivityStart', `${dicGuildActivity.startSeconds} ${dicGuildActivity.startMinute} ${dicGuildActivity.startTime} * * ?`, guildActivityStartSchedule);
let statusResult = getGuildActivityByDic(dicGuildActivity);
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);
}
// 发完之后再做下周自动宣战
let serverlists = await getAllServers();
for(let serverId of serverlists) {
await autoDeclare(serverId);
}
if(guildActSecondsJobId) {
guildActSecondsJobId.cancel();
guildActSecondsJobId = undefined;