军团活动:修改粮草先行

This commit is contained in:
luying
2022-04-30 19:19:15 +08:00
parent d9d0aad862
commit 2b737f2528
6 changed files with 160 additions and 123 deletions

View File

@@ -8,8 +8,7 @@ import { Record, UserGuildActivityRecModel } from "../../db/UserGuildActivityRec
import { GateMembersRec, CityParam, Member, WoodenHorse } from "../../domain/battleField/guildActivity";
import { DicGuildActivity } from "../../pubUtils/dictionary/DicGuildActivity";
import { getAllServers, getRoleOnlineInfo } from "../redisService";
import { SimpleGuildRankParam, SimpleRoleRankParam, SimpleGuildRankWithTimeParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank";
import { getGuildChannelSid, getWorldChannelSid, getCityChannelSid } from "../chatChannelService";
import { SimpleGuildRankParam, SimpleRoleRankParam, GuildRankInfo, RoleRankInfo } from "../../domain/rank";
import { pinus } from "pinus";
import { GuildActivityRecordModel } from "../../db/GuildActivityRec";
import { genAuction } from "../auctionService";
@@ -22,7 +21,6 @@ import { RaceActivityObject } from "./raceActivityObj";
import { Rank } from "../rankService";
import { BossInstanceModel } from "../../db/BossInstance";
import { UserGuildModel } from "../../db/UserGuild";
import { raceActivityEnd } from "../timeTaskService";
import { addActive } from "../guildService";
import { ActivePlayer, GuildRecord, ServerRecordModel } from "../../db/ServerRecords";
import { Attack } from "../../domain/battleField/pvp";
@@ -222,25 +220,6 @@ export async function getCityActivityRank(guildCode: string, serverId: number, c
return { guildRank, myGuildRank, memberRank, myMemberRank }
}
export async function getRaceActivityRank(guildCode: string, serverId: number) {
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true);
r.setGenerFieldsFun(generField);
let { myRank, ranks } = await r.getRankListWithMyRank({ guildCode });
if (!myRank) {
myRank = await r.generMyRankWithGuild(guildCode, 0, 0);
}
return { guildRank: ranks, myGuildRank: myRank }
}
function generField(params: GuildRankInfo) {
let { rank, code, name, num, time } = params;
let param = new SimpleGuildRankWithTimeParam(rank, code, name, { distance: num / 1000, time: Math.floor(time), startTime: 0, durability: 0 });
return param;
}
/**
* 获取和自己同屏的5个木牛流马
* @param guildCode
@@ -248,17 +227,18 @@ function generField(params: GuildRankInfo) {
*/
export async function getWoodenHorseList(guildCode: string, serverId: number) {
let obj = getRaceActivityObj();
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true, 5);
let { myGuildRank, guildRank } = await obj.getRanks(serverId, guildCode);
let myRank = await r.getMyRank({ guildCode });
let myRank = myGuildRank?.rank||0;
let startRank = myRank - 2 > 0 ? myRank - 2 : 1;
let endRank = startRank + 4;
let range = <GuildRankInfo[]>await r.getRankByRange(startRank, endRank);
let woodenHorseList = new Array<WoodenHorse>();
for (let { code } of range) {
let woodenHorse = await obj.getWoodenHorse(code, serverId);
if (woodenHorse) {
woodenHorseList.push(woodenHorse);
for (let { rank, code } of guildRank) {
if(rank >= startRank && rank <= endRank) {
let woodenHorse = await obj.getWoodenHorse(code, serverId);
if (woodenHorse) {
woodenHorseList.push(woodenHorse);
}
}
}
return woodenHorseList;
@@ -618,33 +598,10 @@ export async function sendGuildCityDeclare(cityId: number, declareGuildCode: str
*/
export async function calWoodenHorseAndSend(serverId: number) {
console.log('calWoodenHorseAndSend');
let guildKey = REDIS_KEY.RACE_ACTIVITY;
let obj = getRaceActivityObj();
let calResult = new Map<string, WoodenHorse>();
for(let [code] of obj.getAllWoodenHorses()) {
let _obj = await obj.getWoodenHorse(code, serverId);
if(_obj) calResult.set(code, _obj);
}
let { guildRank: ranks } = await obj.getRanks(serverId);
let fun = async function (param: GuildRankInfo) {
let { rank, code, name } = param;
let _obj = calResult.get(code);
return new SimpleGuildRankWithTimeParam(rank, code, name, _obj);
}
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true);
r.setGenerFieldsFun(fun);
let ranks = <GuildRankInfo[]>await r.getRankByRange();
let map = new Map<number, WoodenHorse[]>();
let guildRank = new Array<SimpleGuildRankWithTimeParam>();
let l = ranks.length > 10 ? 10 : ranks.length;
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, _obj);
guildRank.push(param);
}
// 找到往前和往后2艘船
for (let i = 0; i < ranks.length; i++) {
let { code } = ranks[i];
@@ -670,15 +627,13 @@ export async function calWoodenHorseAndSend(serverId: number) {
// console.log('send', woodenHorseList.length);
let curRank = ranks[rank];
let wh = await obj.getWoodenHorse(curRank.code, serverId);
let myGuildRank = new SimpleGuildRankWithTimeParam(curRank.rank, curRank.code, curRank.name, wh);
let events = obj.getEvents(curRank.code, wh ? wh.distance : 0);
await sendMessageToGuildWithSuc(curRank.code, PUSH_ROUTE.GUILD_RACE_UPDATE, { timestamp: Date.now(), woodenHorseList, guildRank, myGuildRank, events });
await sendMessageToGuildWithSuc(curRank.code, PUSH_ROUTE.GUILD_RACE_UPDATE, { timestamp: Date.now(), woodenHorseList, guildRank: ranks, myGuildRank: curRank, events });
map.delete(rank);
}
}
}
calResult.clear();
return;
}
@@ -703,17 +658,21 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
let { serverId, durability, distance } = woodenHorse;
let obj = getRaceActivityObj();
// 计算排名,计算耐久,发送奖励
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId }, true);
let { guildRank, myGuildRank } = await obj.getRanks(serverId, guildCode);
let rank = myGuildRank?.rank||0;
let r = new Rank(REDIS_KEY.RACE_ACTIVITY, { serverId });
await r.setRankWithGuildInfo2(guildCode, myGuildRank.num, myGuildRank.sortTime, myGuildRank.durability);
let isSuccess = distance >= GUILDACTIVITY.RACEACTIVITY_LENGTH; // 血条未击破则没有占领军团
let myGuildRank = await r.getMyRank({ guildCode });
let members = obj.getMembersOfGuild(guildCode);
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, myGuildRank);
let rewards = getGuildAuctionRewards(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, rank);
let rec = await GuildActivityRecordModel.updateInfo(guildCode, GUILD_ACTIVITY_TYPE.RACE_ACTIVITY, {
memberCnt: members.length, members,
isSuccess, isCompleted: true, rank: myGuildRank,
isSuccess, isCompleted: true, rank,
rewards: rewards.map(cur => cur.goods),
woodenHorse,
woodenHorse: woodenHorse.getTreatTime(),
});
if (rec) {
// 奖励加入拍卖行
@@ -723,9 +682,7 @@ export async function raceActivitySettleReward(guildCode: string, woodenHorse: W
let honour = dic.honour + Math.floor(durability * GUILDACTIVITY.RACEACTIVITY_DURABILITY_REWARD);
for(let { roleId } of members) {
await updateUserRecAndSendHonour(honour, 0, myGuildRank, roleId, members);
let onlineUser = await getRoleOnlineInfo(roleId);
await updateUserRecAndSendHonour(honour, 0, rank, roleId, members);
// 发放活跃
await addActive(roleId, serverId, GUILD_POINT_WAYS.ACTIVITY); //获得活跃值
}