军团活动:修复粮草先行
This commit is contained in:
@@ -111,8 +111,15 @@ export class CityActivityHandler {
|
||||
//TODO 权限校验&时间校验
|
||||
|
||||
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);
|
||||
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);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Application, ChannelService, BackendSession } from "pinus";
|
||||
import { GUILD_ACTIVITY_TYPE, STATUS, GUILD_ACTIVITY_STATUS, GUILD_POINT_WAYS, REDIS_KEY } from "../../../consts";
|
||||
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 { GuildActivityRecordModel } from "../../../db/GuildActivityRec";
|
||||
import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec";
|
||||
@@ -127,12 +127,15 @@ export class RaceActivityHandler {
|
||||
// 使用道具
|
||||
async useItem(msg: { id: number, count: number, toGuild: string }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let roleName = session.get('roleName');
|
||||
let serverId = session.get('serverId');
|
||||
let guildCode = session.get('guildCode');
|
||||
let sid = session.get('sid');
|
||||
|
||||
let {id, count, toGuild} = msg;
|
||||
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);
|
||||
if(!event) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||
|
||||
@@ -174,7 +177,12 @@ export class RaceActivityHandler {
|
||||
}
|
||||
|
||||
async test(msg: { serverId: number }, session: BackendSession) {
|
||||
let {serverId} = msg;
|
||||
await calWoodenHorseAndSend(serverId);
|
||||
let guildCode = session.get('guildCode');
|
||||
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 { gameData } from '../../../pubUtils/data';
|
||||
import { setWeek } from '../../../pubUtils/timeUtil';
|
||||
import { getAllServers } from '../../../services/redisService';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GuildActivityRemote(app);
|
||||
@@ -55,10 +56,12 @@ export class GuildActivityRemote {
|
||||
let now = new Date();
|
||||
cur.startMinute = now.getMinutes();
|
||||
cur.startTime = now.getHours();
|
||||
cur.startSeconds = now.getSeconds();
|
||||
} else {
|
||||
let now = new Date(Date.now() - cur.duringTime * 1000);
|
||||
cur.startMinute = now.getMinutes();
|
||||
cur.startTime = now.getHours();
|
||||
cur.startSeconds = now.getSeconds();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -80,6 +80,8 @@ export function guild(session: Session, msg: any, app: Application, cb: (err: Er
|
||||
} else if (['guild.raceActivityHandler.getRaceActivity',
|
||||
'guild.raceActivityHandler.join',
|
||||
'guild.raceActivityHandler.getRace',
|
||||
'guild.raceActivityHandler.useItem',
|
||||
'guild.raceActivityHandler.battleEnd',
|
||||
].indexOf(arg.route) !== -1) {
|
||||
rid = session.get('serverId').toString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user